方式一: implements Serializable 这个比较常用, 对于我们想要保护的某些属性使用transient修饰。
这样的话我们就不能把这个属性值写入磁盘了,保存对象使用ObjectOutputStream 的writeObject(obj) 方法;
读取就是翻过啦,使用输入流ObjectInputStream的 readObject
方式二: implements Externalizable
说一下Externalizable接口 ,Externalizable接口继承了Serializable,
但是有提供了两个方法
public void writeExternal(ObjectOutput out) throws IOException {}和
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {}
先说一下实现Externalizable接口的类,它默认对象的属性值时transient (瞬时)的不会被序列化
但是使用上边的两个方法可以让我们自由的去实现我们想要的序列化属性,
比如我有一个属性String name 想序列化
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name);
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
String str = (String)in.readObject();
}
我们必须在这两个方法里分别write 和read 不然 在我们序列化和反序列化中就会出现异常
implements Externalizable 实现序列化有点麻烦,但是我们可以很好的控制我们需要实现序列化的地方。