如果我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializable对对象序列化。甚至有时候在把持久化的对象保存在存储设备上或者通过网络传输给其他客户端的时候,需要使用Serializable来完成对象的持久化。在实际开发过程中,习惯了使用序列化传输数据,但是并没有深入了解。Andriod进阶从序列化开始。
private static final long serialVersionUID = 29347521293479523L;
Serializable
简介
Serializable是Java所提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。在实际使用时相当的简单,只需要在类的声明中实现Serializable接口即可,同时在类中声明一个标识符即可实现默认的序列化过程。private static final long serialVersionUID = 29347521293479523L;
Serializable的用途
作为一种持久化机制
如果使用的是FileOutputStream流的方式,则数据将被自动地写入文件中,作为一种复制机制
如果使用的是ByteArrayOutputStream流的方式,数据将写入内存中的字节数组中。该字节数组可以用来创建初始对象的副本,作为一种通信机制
如果是使用套接字(Socket)流的方式,则数据自动地通过网络连接传输一另一个端点,并由这个端点上的程序来决定做什么。简单实现
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private int userId;
private String name;
private boolean isMale;
public User(int userId, String name, boolean isMale) {
this.userId = userId;
this.name = name;
this.isMale = isMale;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", name='" + name + '\'' +
", isMale=" + isMale +
'}';
}
}
// 核心代码
User user = new User(1, "Green", true);
ObjectOutputStream out = null;
out = new ObjectOutputStream(new FileOutputStream("cache.text"));
out.writeObject(user);
out.close();
ObjectInputStream in = null;
in = new ObjectInputStream(new FileInputStream("cache.text"));
User userRead = (User) in.readObject();
in.close();