繁体   English   中英

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

[英]What is the safest way to use direct byte buffers in Java?

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

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

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

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

您可能想要避免(反)序列化的唯一原因是为了提高速度,但是,如果这是您繁忙的循环之一,则无论如何您都会迷失方向。 如果存在网络(反序列化)问题,则应更好地设计协议。

我认为最好的做法是这样,虽然可以解决,但应该有效。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM