gpt4 book ai didi

java - 用于将 java 对象序列化为固定宽度字节数组的库

转载 作者:行者123 更新时间:2023-12-02 09:21:22 25 4
gpt4 key购买 nike

我想以二进制格式存储一个非常简单的 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 长,即 3 x 8 字节 = 24 字节。

这一点至关重要,因为我将按顺序记录这些内容,并且稍后我需要能够通过索引找到它们,即“为我找到第 127 条记录”。

这对我来说工作得很好,但我讨厌样板 - 事实上,在某些时候我会犯一个错误,最终会写入大量无法读回的数据,因为有一个我的序列化/反序列化方法之间不一致。

有没有一个库可以为我生成这样的东西?

理想情况下,我正在寻找类似 protobuf 的东西,具有固定长度的编码方案。后来,我也想对字符串进行编码。这些也将具有固定的长度。如果字符串超过长度,则会被截断为 n 个字节。如果字符串太短,我会将其空终止(或类似的)。

最后,protobuf 支持不同版本的协议(protocol)。我最终不可避免地需要这样做。

在我开始自己动手之前,我希望有人能提出建议

最佳答案

让你的类继承java.io.Serialized接口(interface)。然后,您可以使用 java.io.ObjectOutputStream 和 java.io.ObjectInputStream 将对象序列化到流或从流中反序列化对象。 writeread 方法采用 byte 数组作为参数。要使其长度固定,请标准化所使用的 byte[] 数组的大小。

关于java - 用于将 java 对象序列化为固定宽度字节数组的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com