axe*_*l22 6 java serialization kryo
假设我在内存中有一个arr类型的对象数组A,每个对象都有一个指向同一个对象的引用字段B.
插图:
A_1 A_2 A_3 ... A_N
| | | |
| | V |
\--->\--> B <-----/
Run Code Online (Sandbox Code Playgroud)
请注意,每个类型对象中的引用字段A指向同一个类型的对象B.
现在,我序列阵列arr包含类型的对象A到ObjectOutputStream.然后我反序列化以这种方式获得的字节.
我得到一个新阵列arr1.
1)数组是否arr1具有类型的对象,A以便它们都指向同一个类型的对象B?(我不是指序列化之前的同一个对象,而是一个独特的新创建的对象类型B)
2)换句话说,在Java中调用serialize/deserialize会保留与序列化之前相同的对象图吗?(即新反序列化的对象图与旧的同构图是同构的)
3)这在哪里记录?(即请提供引文)
4)相同的问题1-3,但适用于Java 的Kryo序列化框架.
谢谢.
http://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html
对象的默认序列化机制会写入对象的类,类签名以及所有非瞬态和非静态字段的值.对其他对象的引用(瞬态或静态字段除外)也会导致写入这些对象. 使用引用共享机制对对单个对象的多个引用进行编码,以便可以将对象图形恢复为与写入原始图像时相同的形状.
至于我对规范的理解,如果要共享的对象实例经过相同的ObjectOutputStream,则会获得共享对象引用.
因此,当您序列化包含该arr数组的类时,每个写入的对象都会获得一个ID,对于每个通过该流的引用,只会写入该ID.在这种情况下,反序列化的图形与原始图形保持同质.
对不起,我无法帮助krio库自己的序列化机制,我很乐意向使用它的人学习.
关于kryo的编辑:
我找到的一些文档:
默认情况下,第一个之后图形中对象的每个外观都存储为整数序数.这允许序列化对同一对象和循环图的多个引用.这有少量开销,如果不需要,可以禁用以节省空间:kryo.setReferences(false);
这个(github)是参考解析器的合同; 给出了两个实现:基于ArrayList的小对象图,基于Map的大图
这是默认对象数组(反)序列化器的实现
类需要注册(反)序列化; 每个注册类都可以与一个序列化器(其中,默认的Java序列化机制)相结合
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |