在Java中使用直接字节缓冲区最安全的方法是什么?

时间:2013-10-18 09:33:54

标签: java serialization bytebuffer

让我坐下来我有一个对象,我想存储在一个直接的字节缓冲区中。 我希望能够从直接字节缓冲区访问对象的一部分,而无需反序列化整个对象。有安全的方法吗?

我认为你可以在序列化对象时以某种方式捕获字节数组偏移量,然后一旦将其写入直接字节缓冲区,就可以根据直接字节缓冲区的偏移量来调整这些偏移量。我不确定是否可以这样做......

2 个答案:

答案 0 :(得分:0)

真正的问题不是,这是否可能,因为它几乎肯定是,但你为什么要首先这样做呢?

如果您只想从对象访问几个字段,最简单的方法是对其进行反序列化,然后将这几个字段复制出来。

您可能想要避免(反)序列化的唯一原因是速度,但如果这是在您的一个繁忙循环中,那么您仍然会丢失。如果网络(解)序列化是个问题,那么您应该更好地设计协议。

答案 1 :(得分:0)

我认为最好的做法是这样,有点像是一种解决方法,但应该有效。

 interface OffsetMemberMap {
     Map<String,Long> offsetMemberMap();
}

这个想法是创建实现上述接口的对象,这个映射将为每个成员存储针对字符串的内存地址。将首先创建子对象,并且一旦添加到DirectByteBuffer,偏移位置将存储在此映射中的父对象中。 为了访问特定成员,用户需要提供寻址该成员的字符串,因此只需要反序列化所需的内容。这将允许您在DirectByteBuffers中存储大型链接对象,同时只能序列化/反序列化写入/读取时所需的位。