序列化流
(1)序列化:将对象转换成字节存储到文件中
(2)反序列化:将文件中存储字节转化为对象
序列化流和反序列化流
(1)序列化流:ObjectOutputStream,构造函数:public ObjectOutputStream(OutputStream out)
//创建序列化流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test2/test3.txt"));
//调用writeObject方法将对象写到文件中
oos.writeObject(new Car("小蜜蜂",99999,"red"));
oos.close();
}
(2)反序列化流:ObjectInputStream,构造函数:public ObjectInputStream(InputStream in)
public static void test02() throws IOException, ClassNotFoundException {
//创建反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test2/test3.txt"));
//调用readObject方法读取文件中的对象
Car c=(Car)ois.readObject();
System.out.println(c);
ois.close();
}
注意事项:
(1)如果要将一个类的对象进行序列化操作,该类要实现serializable接口,否则会报NotSerializable。
(2)当一个对象序列化后会系带一个serialVersionUID,如果再去改变,此时类会重新编译,serializable接口会重新提供一个serialVersionUID,此时对对象进行反序列化操作时,会因serialVersionUID不同而导致失败。
(3)使用transient和static修饰的变量无法被序列化
(4)解决serialVersionUID的方法:手动声明一个serialVersionUID让其值无论如何都保持不变。
例如:static final long serialVersionUID=1;