对象的输入输出流:主要的作用是用于写对象的信息与读取对象的信息,对象信息一旦写到文件上,那么对象的信息就可以做到持久化了。
对象的输出流:ObjectOutputStream;
把对象信息写入到文件中---->对象的序列化;
ObjectOutputStream使用步骤:
1、找到目标文件;
2、建立数据输出流对象;
3、建立对象的输出流对象;
4、把对象写出;
5、关闭资源;
把文件中的对象信息读取出来---->对象的反序列化;
对象的输入流:ObjectInputStream;
ObjectInputStream使用步骤:
1、找到目标文件;
2、建立数据输入流对象;
3、建立对象的输入流对象;
4、读取对象信息;
5、关闭资源;
对象的输入输出流要注意的细节:
1、
如果对象需要被写出到文件上,那么对象所属的类必须要实现Serializable接口,Serializable接口没有任何的方法,是一个标识接口而已。(所有的集合类都实现了Serializable接口)。
2、对象的反序列化创建对象时并不会调用到构造方法。(创建对象肯定要依赖对象所属的class文件);
3、serialVersionUID是用于记录class文件的版本信息的,serialVersionUID这个数字是通过一个类的类名、成员、包名、工程计算出来的;
4、使用ObjectInputStream反序列化的时候,ObjectInputStream会先读取文件中的serialVersionUID,然后与本地的class文件的serialVersionUID进行比较,如果这两个ID不一致,那么反序列化失败;
5、如果序列化与反序列化时可能会修改类的成员,最好一开始就给这个类指定一个serialVersionUID,如果类已经指定了serialVersionUID,然后在序列化与反序列化时,jvm就不会再自己算这个class的serialVersionUIDle
(在类的成员位置加一句private static final long
serialVersionUID=number);
6、如果一个对象的某个数据不想被序列化到硬盘上,可以使用关键字transient修饰。
7、如果一个类维护了另一个类的引用,则另一个类也需要实现Serializable接口。