我刚刚了解了 Java 中序列化的概念,虽然我“了解”了基础知识,但我不禁觉得这有点矫枉过正?我的逻辑是,如果我有指向对象的指针并且我知道它在内存中占用了多少字节。为什么我不能在理论上将这些字节写入一些 txt 文件,以及一些额外的字节来指示类型。有了这个,我不能只是读回这些字节并恢复我的原始对象吗?我的书在序列化方面的大量细节很好地表明我并没有真正理解这一点的重要性,并且可能有比仅仅按原样写出所有字节更微妙的事情。任何帮助是极大的赞赏!(如果有帮助的话,我有一些 C++ 背景知识)
2 回答
慕后森
TA贡献1802条经验 获得超5个赞
为什么我不能在理论上将这些字节写入一些 txt 文件,以及一些额外的字节来指示类型。有了这个,我不能只是读回这些字节并恢复我的原始对象吗?
怎么会有人把它们读回来?假设我正在编写应该在您的文件中读取的代码。请告诉我第三个字节的含义,以便我可以正确解码。
如果对象的内部表示包含指向其他对象的指针,这些对象在程序下次运行时可能位于不同的内存位置怎么办?例如,通过对相同的内部字符串对象进行内部引用来管理相同的字符串是很常见的。考虑到内部字符串对象在下次运行中可能不存在,如何将对该文件的引用写入合理?
要将数据写入文件,您需要以某种特定格式将其写出,该格式实际上包含您能够读回所需的所有信息。此时此程序在内部工作的情况不会像这样不能保证另一个程序在另一个时间可以理解它。
慕桂英4014372
TA贡献1871条经验 获得超13个赞
你建议提供的作品;
字段的顺序和类型不会改变。请注意,这不是在编译时设置的。
字节顺序不会改变。
您没有任何引用,例如没有字符串、枚举、列表或映射。
类型的名称和包不会改变。
我们在 Chronicle,使用一种支持这种形式的序列化,因为它快得多,但它非常有限。你必须非常清楚这些限制,并有一个合适的问题。我们还有一种序列化形式,它没有这些限制,但速度较慢。
Java 序列化的目的是支持任意对象图,即使数据在可能以不同方式排列数据的系统之间交换也是如此。
添加回答
举报
0/150
提交
取消