第29次(IO流)
学习主题:IO流
学习目标:
1 掌握序列化和反序列化
2 掌握装饰器模式
- 对象流
- 为什么需要序列化?
序列化以后的对象可以保存到磁盘上,也可以在网络上传输,使得不同的计算机可以共享对象。(序列化的字节序列是与平台无关的)。
- 对象的序列化有哪些条件?
只有实现了Serializable接口的类的对象才可以被序列化。Serializable接口中没有任何的方法,实现该接口的类不需要实现额外的方法。
如果对象的属性是对象,属性对应类也必须实现Serializable接口
- 序列化和反列序列化
- 简述序列化与反序列化的内容?
- 序列化能保存的元素
- 只能保存对象的非静态成员变量
- 不能保存任何成员方法和静态的成员变量
- 不能保存transient成员变量
- 如果一个对象的成员变量是一个对象,这个对象的成员变量也会保存
- 串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存
- 使用对象流把一个对象写到文件时不仅保证该对象是序列化的,而且该对象的成员对象也必须是可序列化的。
- 如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记transient,那么对象仍然可以序列化。
- 对象序列化的注意事项有哪些?
- 同一个对象多次序列化的处理
- 所有保存到磁盘中的对象都有一个序列化编号
- 序列化一个对象中,首先检查该对象是否已经序列化过
- 如果没有,进行序列化
- 如果已经序列化,将不再重新序列化,而是输出编号即可
- 如果不希望某些属性(敏感)序列化,或不希望出现递归序列
- 为属性添加transient关键字(完成排除在序列化之外)
- 自定义序列化(不仅可以决定哪些属性不参与序列化,还可以定义属性具体如何序列化)
- 序列