了解Java中序列化的重要性

时间:2018-11-01 07:33:34

标签: java serialization

我刚刚被介绍了Java序列化的概念,虽然我“了解”了基础知识,但我不禁觉得这有点过头了?我的逻辑是,如果我有指向对象的指针,并且知道它在内存中占用了多少字节。从理论上讲,为什么我不能将这些字节以及一些额外的字节写入类型文件中呢?有了这个,我能不能再读回这些字节并恢复我的原始对象?

我的书对序列化进行了详细说明,这很好地表明我不是很了解此方法的重要性,而且可能存在比仅按原样写出所有字节更微妙的事情。任何帮助是极大的赞赏! (如果有帮助,我会在c ++中有背景知识)

2 个答案:

答案 0 :(得分:3)

  

为什么我理论上不能将这些字节以及一些额外的字节写入类型文件中呢?有了这个,我能不能再读回这些字节并恢复我的原始对象?

有人怎么能读回它们?假设我正在编写应该在您的文件中读取的代码。请告诉我第三个字节是什么意思,以便我可以对其正确解码。

如果对象的内部表示包含指向其他对象的指针,这些指针可能在下次程序运行时位于不同的内存位置?例如,通过具有对同一内部字符串对象的内部引用来管理相同的字符串是很常见的。鉴于内部字符串对象在下一次运行中可能不存在,将引用写入文件的方式将如何明智?

要将数据写入文件,您需要以某种特定的格式将其写出,该格式实际上包含您需要能够读回的所有信息。这时该程序在内部起作用的结果不会这样做是不可能的,因为不能保证另一个程序在其他时间可以理解它。

答案 1 :(得分:0)

您提供的建议可行;

  • 字段的顺序和类型不变。请注意,这不是在编译时设置的。
  • 字节顺序不变。
  • 您没有任何引用,例如没有String,enum,List或Map。
  • 类型的名称和包装不变。

我们在《纪事报》上使用了一种序列化形式来支持此操作,因为它的速度要快得多,但是非常局限。您必须非常意识到这些限制,并遇到一个合适的问题。我们也有一种序列化的形式,没有任何这些限制,但是速度较慢。

Java序列化的目的是即使在可能会以不同方式排列数据的系统之间交换数据时,也支持任意对象图。