第二章——Serializable的使用(跨进程使用和Intent的传递对象)
一、Serializable类(JAVA本身具有的)
简介:Serializable是一个接口。
作用:是JAVA提供的序列化接口,实现序列化和反序列化的操作。
二、跨进程使用
1.事前准备
public class Book implements Serializable {
//注:此段可写也可不写 —— 稍后讲解 ①
private static final long serialVersionUID = 13165131351L;
private String mBookName;
private int mBookId;
/**
*准备:创建Book类,并继承Seriaizable接口
* */
public Book(int bookId, String bookName) {
mBookId = bookId;
mBookName = bookName;
}
@Override
public String toString() {
return mBookId+""+mBookName;
}
}
2.序列化与反序列化
//序列化过程
Book book = new Book(123,"Android 开发艺术探索");
FileOuputStream fos = new FileOutputStream("test.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(book);
oss.close(); //反序列化过程
FileInputStream fis = new FileInputStream("test.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Book newBook = (Book)ois.readObject();
ois.close();
注:反序列化之后对象book与newBook数据相同,但两者不是同一个对象。
3.原理
当序列化的时候,系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统回去检测文件中的serivalVersionUID是否与当前类的serivalVersionUID相同,如果不相同就会反序列化失败。
回答①:当我们继承Serializable的时候,系统会自动提供一个serialVersionUID值,但是当该类中有改变(如:成员变量 减少或者增加,我们将类拿去修改)就会改变系统提供的serialVersionUID值。
但是,如果自己设置了serialVerionUID的值,当成员变量、方法 减少或者增加的时候,因为反序列化的是之前没有改变类的序列化,所以系统会尽可能恢复多的数据。如果改变类名和成员变量的类型,就还是会反序列化失败(结构都变了)。
注:静态成员、用transient标记的成员变量不进行序列化
三、Intent之间传递Serializable类(各个Activity传递对象的方法)
//MainActivity.java
Book book = new Book(123, "android开发艺术探索");
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("book",book);
startActivity(intent); //SecondActivity.java
Intent intent = getIntent();
Book book = intent.getSerializableExtra("book");
只需要让对象继承Serializable接口就可以了,之后就用Intent传递。
第二章——Serializable的使用(跨进程使用和Intent的传递对象)的更多相关文章
- AIDL跨进程通信报Intent must be explicit
在Android5.0机子上采用隐式启动来调试AIDL时,会出现Intent must be explicit的错误,原因是5.0的机子不允许使用隐式启动方式,解决的方法是:在启动intent时添加i ...
- 以中间件,路由,跨进程事件的姿势使用WebSocket--Node.js篇
上一篇文章介绍了在浏览器端以中间件,路由,跨进程事件的姿势使用原生WebSocket.这篇文章将介绍如何使用Node.js以相同的编程模式来实现WebSocket服务端. Node.js中比较流行的两 ...
- Android跨进程通信的四种方式
由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...
- android 跨进程通信
转自:http://www.androidsdn.com/article/show/137 由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一 ...
- Android跨进程通信访问其他应用程序的Activity
访问其他应用程序的ActivityActivity既可以在进程内(同一个应用程序)访问,也可以跨进程访问.如果想在同一个应用程序中访问Activity,需要指定Context对象和Activity的C ...
- Android 跨进程渲染
本项目用于验证 Android 是否能够跨进程渲染 View,最终实现了在子进程创建WebView,主进程显示的功能. 一.跨进程渲染的意义 有一些组件比如 WebView 如果在主进程初始化,会大大 ...
- Intent传递对象——Serializable和Parcelable区别
为什么要将对象序列化? 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.用过序列化对象在网络中传递对象: 3.通过序列化对象在进程间传递对象. 1.实现Serializable接口 Seri ...
- Intent传递对象——Serializable和Parcelable差别
前两篇文章讨论了Serializable和Parcelable实现Intent之间传递对象和对象数组的方式.两种方法实现上相似,效果一致,怎么选择用哪种方法实现呢? Intent在不同的组件中传递对象 ...
- 第二章——Parcelable接口的使用(跨进程,Intent传输)
一.Parcelable类(Android独有的) 简介:Parcelable是一个接口. 作用:是Android提供的序列化接口,实现序列化和反序列化的操作. 二.跨进程使用 步骤一:创建Book类 ...
随机推荐
- vector 汇总
Vector成员函数 函数 表述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c. 将n个elem的拷贝赋值给c. c.at(idx) ...
- Android studio GPU Monitor :GPU Profiling needs to be enabled in the device's developer options
Android studio GPU Monitor 在真机上不能使用,提示:GPU Profiling needs to be enabled in the device's developer o ...
- leetcode 237 Delete Node in a Linked List python
题目: Write a function to delete a node (except the tail) in a singly linked list, given only access t ...
- flask-sqlalchemy 关系表简单操作
from flask import Flaskfrom flask.ext.sqlalchemy import SQLAlchemyfrom flask.ext.migrate import Migr ...
- 淘宝api 开发_获取用户信息
string url = "http://gw.api.taobao.com/router/rest"; "; string appsecret = "fdf7 ...
- 定制化Azure站点Java运行环境(4)
定制化使用您自己的Tomcat版本和JDK环境 在上面章节中,介绍了如何通过web.config,定制默认的Azure website的Java运行环境,默认情况下,Azure站点的Tomcat是7. ...
- fragment低版本
http://bbs.csdn.net/topics/390271980 Fragment框架开发东西确实很方便,但是恼人的是从4.0才开始支持.以前的版本必须用兼容模式开发,本人在网上找了大量资料, ...
- Linux下编译安装qemu和libvirt
目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3 ...
- Delphi与字符编码(实战篇)(MultiByteToWideChar会返回转换后的宽字符串长度)
本文目标: 了解Delphi的字符串类型 字符编码的检测与转换 简体繁体转换 0. 导言 看完“.Net与字符编码(理论篇)”,我们明白了字符是自然语言中的最小单位,在存储和传输的过程中可以使用三种编 ...
- linux系统怎么改为中文版(转)
linux系统安装好后怎么改为中文版呢?今天就跟大家介绍下linux系统改为中文版的方法,希望能帮助到大家! 以下是linux系统改为中文版的四种方法,一起来看看: 方法1:写入环境变量 echo & ...