Java序列化的实现

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();

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值