14.保存对象
对象可以被序列化也可以被展开
对象序列化和文件的输入输出
将序列化对象写入文件
- 创建出FileOutputStream
- 创建ObjectOutputStream
- 写入对象
- 关闭ObjectOutputStream
数据在串流中移动
Object-写入> 对象碾平(ObjectOutputStream)-连接到>FileOutputStream->文件(目的地的)
对象呗序列化的时候发生了什么
如果要让类能够被序列化,就实现Serializable
序列化是全有或全无的
如果某实例变量不能被序列化,就把它标记为transient(瞬时)的
transient String CurrentID;
解序列化(Deserialization):还原对象
- 创建FileInputStream
- 创建ObjectInputStream
- 读取对象
- 转换对象类型
- 关闭ObjectInputStream
解序列化的时候发生了什么事
- 对象从stream中读出来
- Java虚拟机通过存储的信息判断出对象的class类型
- Java虚拟机尝试寻找和加载对象的类.如果找不到或无法加载该类,则Java虚拟机会抛出例外
- 新的对象会被配置在堆上,但构造函数不会执行.很明显的,这样会把对象的状态抹去有变成全新的,而这不是我们想要的结果.我们需要的是对象回到存储时的状态
- 如果对象在继承树上有个不可序列化的祖先类,则该不可序列化类以及在它智商的类构造器(就算是可序列化也一样)就会执行.一旦构造函数连锁启动之后将无法停止.也就是说,从第一个不可序列化的父类开始,全部都会重新初始化状态
- 对象的实例变量会被还原成序列化时点的状态值.transient变量会被赋值null的对象引用或primitive主数据类型的默认为0或false等.
要点
...
将字符串也如文本文件
缓冲区的奥妙之处
没有缓冲区,就好像逛超市没有推车一样.你只能一次拿一项东西结账
读取大文本
- 本文链接: https://halo.cjh.kim/archives/headfirstjava14md
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!