Java序列化的实现一共有两种方式,实现于接口 Serializable 和Externalizable
Serializable实现序列化细节
序列化类及其对象必须实现Serializable 接口
transient修饰为临时属性,不参与序列化
读取到文件尾部的标记:java.io.EOFException
使用serialVersionUID 属性保证序列化类和反序列化类是一致的
Externalizable实现序列化细节
序列化类及其对象必须实现 Externalizable 接口
transient修饰为临时属性,参与序列化
读取到文件尾部的标记:java.io.EOFException
使用serialVersionUID 属性保证序列化类和反序列化类是一致的
当实现于Externalizable 接口的时候,必须要实现两个方法,手动进行封装,和提取数据
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(name);//进行封装String类型
out.writeInt(age);
System.out.println("writeExternal");
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = in.readUTF();//读取String类型
age=in.readInt();
System.out.println("readExternal");
}
当在实体类中 在没有序列化之前定义 private static final int serialVersionUID=1320;
直接进行反序列化会报local class incompatible: stream classdesc serialVersionUID = 312312412423423, local class serialVersionUID = 1320
进行序序列化的时候
Student s = new Student("lisi", 12);
FileOutputStream fos = new FileOutputStream("D:\\a.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(s);
oos.flush();//清空缓存中的数据从内存存入硬盘
进行反序列化的时候
FileInputStream fis = new FileInputStream("D:\\a.bin");
ObjectInputStream oos = new ObjectInputStream(fis);
Student o = (Student)oos.readObject();
968

被折叠的 条评论
为什么被折叠?



