对象序列化和反序列化

本文详细介绍了Java序列化和反序列化的概念,包括何时需要进行序列化,如保存对象到磁盘或在网络中传输。文章指出,要实现序列化,对象所属的类必须实现Serializable接口,并提到了transient关键字用于排除成员变量参与序列化。同时,提供了序列化和反序列化对象的代码示例,强调了修改序列化后的类文件可能导致InvalidClassException异常及其解决方法。
摘要由CSDN通过智能技术生成

1.什么是 java 序列化?

  • 序列化:将 Java 对象转换成字节流的过程。
  • 反序列化:将字节流转换成 Java 对象的过程。

2.什么情况下需要序列化?

  • 将对象保存到磁盘中,或者在网络中传输对象时。

3.注意

  • 一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口
  • Serializable是一个标记接口,实现该接口,不需要重写任何方法
  • 用对象序列化流序列化了一个对象后,修改了对象所属的类文件,读取数据会抛出InvalidClassException异常
    • 解决方案
      • 重新序列化
      • 给对象所属的类加一个serialVersionUID ,如:private static final long serialVersionUID = 42L;
  • transient关键字
    • 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

代码示例

  • 序列化对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D\\myOtherStream\\oos.txt"));
//创建对象
Student s = new Student("张三",33);

oos.writeObject(s);

//集合
//ArrayList<String> studentNumber = new ArrayList<>();
//studentNumber.add("张三");
//序列化集合
//oos.writeObject(studentNumber);

//释放资源
oos.close();
  • 反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D\\myOtherStream\\oos.txt"));

//从ObjectInputStream读取一个对象
Object obj = ois.readObject();
Student s = (Student) obj;

System.out.println(s.getName() + "," + s.getAge());

//ArrayList<String>  arrayList= (ArrayList<String>)obj;
//for (String arr : arrayList) {
//            System.out.println(arr);
//        }

ois.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值