我想要将一个非常简单的pojo对象以二进制格式存储:
public class SampleDataClass {
private long field1;
private long field2;
private long field3;
}
为了实现这个功能,我编写了一对简单的序列化/反序列化方法:
public class SampleDataClass {
// ... Fields as above
public static void deserialize(ByteBuffer buffer, SampleDataClass into) {
into.field1 = buffer.getLong();
into.field2 = buffer.getLong();
into.field3 = buffer.getLong();
}
public static void serialize(ByteBuffer buffer, SampleDataClass from) {
buffer.putLong(from.field1);
buffer.putLong(from.field2);
buffer.putLong(from.field3);
}
}
简单高效,最重要的是二进制格式中对象的大小是固定的。我知道每个记录序列化后的大小将是3 x long,即3 x 8字节=24字节。
这一点非常关键,因为我将按顺序记录它们,并且稍后需要通过索引找到它们,例如“找到第127条记录”。
对我来说,这很有效,但我讨厌样板代码 - 而且在某些时候,我会犯错误,导致写入无法读取的数据,因为我的序列化/反序列化方法之间存在不一致性。
是否有一个库可以为我生成类似protobuf的东西?
理想情况下,我正在寻找像protobuf一样具有固定长度编码方案的东西。稍后,我还想编码字符串。这些也将具有固定长度。如果字符串超过长度,则将其截断为n个字节。如果字符串太短,我将以null结尾(或类似方式)。
最后,protobuf支持协议的不同版本。我迟早需要做到这一点。
我希望在开始自己编写之前,有人能提出建议。