java 序列化中最便宜的标记?

Cheapest marker in java serialization?

我正在使用 ObjectOutputStream 的 writeObject 方法序列化树。 tree 的数据类型是通用的,可以是整数,也可以是复杂的 'Student' 对象。但是我需要 'mark' 一个空指针,一个我将用来标记离开节点的指针。 例如:

  if (node.item == null) {
     oos.writeObject('SOMEMARKER');
     return;
  }

我的问题是什么是标记 null 的最便宜(space 明智)的方法?例如:使用布尔值? 例如:oos.writeObject(true) ?

标记 null 的最简单方法是使用空值。

oos.writeObject(null);

您可以使用布尔值进行标记,但 writeObject(true) 使用的 space 不仅仅是传递 null

if (node.item == null) {
    oos.writeByte(0);
} else {
    oos.writeByte(1);
    oos.writeObject(note.item);
}

// to read
Item item = ois.readByte() == 0 ? null : (Item) ois.readObject();

但是,由于您使用的是 Java 序列化,它无论如何都非常低效,我不会担心它并保持简单。

oos.writeObject(item.node);

// to read
Item item = (Item) ois.readObject();