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