是否有一个Java ByteBuffer实现,它结合了多个支持ByteBuffers?

Mic*_*een 7 java nio bytebuffer real-time

我有一个或多个ByteBuffers包含单个消息的一部分.现在我想阅读此消息,但我不想将N ByteBuffer复制到单个消息中.我的解析器期望单个ByteBuffer具有完整的消息,但是我的消息被分成N个ByteBuffers.

有没有办法将这些N ByteBuffers组合成一个没有字节复制的单个?我想象了ByteBuffer抽象类的某种智能实现,它由引擎盖下的这些ByteBuffer备份,只需调整指针并委托给正确的ByteBuffer.

如果您对我需要的原因感到好奇,请查看下面的BM&F/Bovespa协议.它们将消息分成块,并且它们可以在不同的数据包中无序出现,换句话说,相同的消息序列可以包含多个数据包,每个数据包都有一个消息块.我无法按顺序写入相同的ByteBuffer,因为这些块可能出现故障.:(

我错过了一些更聪明的东西吗?在下面给出了这个块协议,看起来没有办法顺序写入相同的ByteBuffer.:(

在此输入图像描述 在此输入图像描述

小智 -4

您可以将 ByteBuffer 彼此链接起来,返回一个 ByteBuffer,如下所示:

bba.append(bbb.toBytes()).append(bbc.toBytes())
Run Code Online (Sandbox Code Playgroud)

这会产生一个 ByteBuffer,可以将其传递给您的解析方法。

它有效地创建了一个副本,但除非您将其分配给某些内容,否则它将排队等待 GC。

如果您不知道 ByteBuffer 的数量,请使用 ByteBuffer 列表,并动态添加每个字节,然后将它们附加到循环中。您可以在附加之前对列表进行排序,以便块按您想要的顺序显示。

  • 投反对票*可能*是因为它指的是“oracle.ide.util.ByteBuffer”,而不是“java.nio.ByteBuffer”... (2认同)