序列化如何为数据结构工作

时间:2013-06-22 06:00:45

标签: java serialization data-structures

序列化如何对包含指针的数据结构起作用,例如树和链表?

我怀疑的原因是,指针存储节点的内存地址。在序列化后进行反序列化时,无法保证它们将被加载到同一个内存位置。此外,如果序列化数据通过网络发送到另一个系统,则会出现同样的问题。

那么它是如何工作的(如果可行的话)?

3 个答案:

答案 0 :(得分:5)

Java没有指针。 Java中的变量是对一段数据的引用。从本质上讲,这意味着您对待变量就像处理实际数据一样,而Java会为您处理“指针逻辑”(不像C,您必须在其中)处理你自己的指针逻辑。)

当一个类被序列化时,其引用中包含的所有信息 - 即它的所有成员变量 - 必须用它序列化。您可以将此视为递归地将每个引用扩展为引用的实际数据的副本。

包含指针(例如,C)的语言中,实现存储和解包指针的序列化/反序列化方法而不是每个指针引用的数据确实会导致你有任意指针您的反序列化数据。 (即,序列化/反序列化将是不正确的。)

答案 1 :(得分:2)

指针是参考。当序列化遇到引用时,它将递归地序列化它,这就是为什么所有成员也必须是可序列化的。它不会存储物理地址,而是构建自己的表,以便它可以跳过已经访问过的对象。在反序列化时,它将从该表构建新模型。

答案 2 :(得分:1)

指针是对执行具有指针的程序的机器的内存上的特定位置的引用,并且它指示您可能具有某些数据的指针。

当您序列化某些内容时,您应该自行序列化数据,而不是引用,这是毫无意义的,因为如果您在另一端有数据,那么为什么要传输它?