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();
我正在使用 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();