让我们坐下来,我有一个对象我想存储在直接字节缓冲区中。我希望能够从直接字节缓冲区访问对象的某些部分,而无需反序列化整个对象。有没有安全的方法来做到这一点?
我认为您可以在序列化对象时以某种方式捕获字节数组偏移量,然后将其写入直接字节缓冲区后,您将根据直接字节缓冲区的偏移量调整这些偏移量。我不确定是否可以这样做...
让我们坐下来,我有一个对象我想存储在直接字节缓冲区中。我希望能够从直接字节缓冲区访问对象的某些部分,而无需反序列化整个对象。有没有安全的方法来做到这一点?
我认为您可以在序列化对象时以某种方式捕获字节数组偏移量,然后将其写入直接字节缓冲区后,您将根据直接字节缓冲区的偏移量调整这些偏移量。我不确定是否可以这样做...
我认为最好的做法是这样,它有点变通,但应该是有效的。
interface OffsetMemberMap {
Map<String,Long> offsetMemberMap();
}
这个想法是创建实现上述接口的对象,该映射将针对每个成员的字符串存储内存地址。子对象将首先创建,一旦添加到 DirectByteBuffer,偏移位置将存储在此映射中的父对象中。为了访问特定成员,用户需要提供地址该成员的字符串,因此只有需要的内容才会被反序列化。这将允许您将大型链接对象存储在 DirectByteBuffers 中,同时只能在写入/读取时序列化/反序列化您需要的位。
真正的问题不是,这是否可能,因为它几乎可以肯定是,但你为什么要首先这样做?
如果您只想访问对象中的几个字段,最简单的方法是反序列化它,然后将这几个字段复制出来。
您可能想要避免(反)序列化的唯一原因是为了速度,但如果这是在您的繁忙循环之一中,那么您无论如何都会迷路。如果网络(反)序列化是问题,那么您应该更好地设计您的协议。