如何在单个数据结构中序列化整数和分隔符位?

时间:2013-12-25 23:28:03

标签: java serialization

我想序列化二叉树,但是我想保存一个位而不是空值。 例如,考虑一个简单的二叉树,值为1的节点和剩下的2个子节点的值为2,右边的值为3.我想将它序列化为1 2。 。 3。 。 我正在考虑将所有整数转换为位,而对于点,我只想存储一个位。 我可以使用java中的哪个数据结构将int和int转换为位并使用set bits间隔它们?

2 个答案:

答案 0 :(得分:0)

我怀疑你希望对方反序列化除字节之外的任何东西(任何小于字节的东西)。我将nulls序列化为整数-1,并使用正整数对节点进行编号。这样,您的序列化方法将是清晰,统一和明确的。

答案 1 :(得分:0)

我同意@ peter.petrov,最好的方法是使用整数表示节点,使用-1表示空值。

我认为不可能仅使用1位来表示空值,因为当您反序列化时,您将无法区分节点和空值(请记住这是一个流)。

但是,如果由于任何原因你“需要”处理位,我能想到的唯一方法就是使用空位序列作为分隔符(例如0000)。此分隔符必须具有已知大小。

如果您的二叉树有15个节点,则需要4位来表示它(2 ^ 4 = 16,15个节点的二进制值和一个用于null)。如果您不知道树有多少个节点,或者它是否可以增长,请小心。

但是,我认为这比使用简单的节点整数和-1代表空值要困难和复杂。