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

java序列化中最便宜的标记?,java,serialization,Java,Serialization,我正在使用ObjectOutputStream的writeObject方法序列化树。树的数据类型是泛型的,可以是整数,也可以是复杂的“学生”对象。但我需要“标记”一个空指针,一个我将用来标记离开节点的指针。 例如: 我的问题是,什么是最便宜的(按空间划分的)空标记方法?使用布尔值? 例如:oos.writeObject(true) 标记null的最简单方法是使用null oos.writeObject(null); 您可以使用布尔值进行标记,但writeObject(true)使用的空间比只传

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

我的问题是,什么是最便宜的(按空间划分的)空标记方法?使用布尔值?
例如:oos.writeObject(
true

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

oos.writeObject(null);
您可以使用布尔值进行标记,但
writeObject(true)
使用的空间比只传递
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 Serailization,这是非常低效的,所以我不会担心它,并保持简单

oos.writeObject(item.node);

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

最便宜的是writeByte(int-val),但这取决于如何解释数据流。为什么需要标记?对象输入/输出流不应该自动处理吗?@DraganBozanovic和Peter Lawrey是正确的。有一个相当常见的误解是,
null
是为序列化中的流结束保留的。事实并非如此。
oos.writeObject(item.node);

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