对象深复制之输出流转输入流
2016-03-26 12:30
405 查看
利用串行化来做深复制(主要是为了避免重写比较复杂对象的深复制的clone()方法,也可以程序实现断点续传等等功能)
把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序师圈子里又非常形象地称为“冷冻”或者“腌咸菜(picking)”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做 “解冻”或者“回鲜(depicking)”过程。
应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝,Java咸菜还可以回鲜。
在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读出来(把咸菜回鲜),便可以重建对象。
如下为深复制源代码。
?
这样做的前提是对象以及对象内部所有引用到的对象都是可串行化的,否则,就需要仔细考察那些不可串行化的对象或属性可否设成transient,从而将之排除在复制过程之外。上例代码改进如下。
?
把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序师圈子里又非常形象地称为“冷冻”或者“腌咸菜(picking)”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做 “解冻”或者“回鲜(depicking)”过程。
应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝,Java咸菜还可以回鲜。
在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读出来(把咸菜回鲜),便可以重建对象。
如下为深复制源代码。
?
?
相关文章推荐
- IOS 中block结构的简单用法
- 栈的应用——圆括号的匹配检验
- python从零安装
- 栈的应用——圆括号的匹配检验
- python--函数每天熟悉一个
- 算法训练 最大的算式
- 诚招运维小弟一名
- HRBUST-1909-理工门外的树
- 诚招运维小弟一名
- Qt的Graphics-View框架和OpenGL结合详解
- Android中的Http通信(二)
- HDU3336 Count the string KMP+递推
- 【杭电-oj】-1236排名-(结构体应用)
- 什么是SVG和SVG常用的形状
- Hexo静态博客搭建教程
- 使用fluentd管理docker日志
- 软考中高项学员:2016年3月23日作业
- 【02单表查询】——02:TOP
- 经典算法面试题(二)
- POJ2524 Ubiquitous Religions(并查集)