我有一个或多个ByteBuffer,其中包含一条消息的一部分。现在,我想阅读此消息,但不想将N ByteBuffer复制到单个消息中。我的解析器期望包含完整消息的单个ByteBuffer,但是我的消息分为N个ByteBuffer。
有没有一种方法可以将这N个ByteBuffer组合成一个字节而不进行字节复制?我想象过ByteBuffer抽象类的某种智能实现,该实现由这些ByteBuffer在后台进行备份,并且只需将指针和委托(delegate)调整为正确的ByteBuffer。
如果您好奇我为什么需要它,请查看BM&F/Bovespa的以下协议(protocol)。它们将消息分成多个块,然后可以按不同的数据包乱序排列,换句话说,相同的消息序列可以进入多个数据包,每个数据包都有一个消息块。我无法顺序写入同一ByteBuffer,因为这些块可能会乱序。 :(
我在这里想念更聪明的东西吗?鉴于下面给出的此块协议(protocol),看来没有办法顺序写入同一ByteBuffer。 :(
最佳答案
我认为您正在寻找的数据结构(据我所知)称为链缓冲区。在内部,它是一个动态增长的字节数组或缓冲区集合(例如Java中的ArrayList
),而在外部,该结构的行为类似于常规的Buffer
。
如果要处理性能问题,可能会非常方便,尽管某些操作的实现可能并非完全无关紧要(例如,搜索给定模式的位置)。
我知道的唯一的公共(public)Java实现是NCHOVY在 ChainBuffer
中的Kraken(尽管不再维护)。