我有一个或多个包含单个消息部分的ByteBuffer。现在我想要读取这条消息,但我不想将N个ByteBuffer复制成一个。我的解析器期望有一份完整消息的单个ByteBuffer,但我的消息被分成了N个ByteBuffer。
有没有办法将这些N个ByteBuffer组合成一个而无需复制字节?我想象中可能会有某种智能实现ByteBuffer抽象类,它由这些ByteBuffer支持,并且只需调整指针和委托以正确地指向ByteBuffer。
如果你好奇我为什么需要这个,请查看来自BM&F/Bovespa的协议。他们将一条消息分成块,并且这些块可以以不同的数据包乱序传输,换句话说,相同的消息顺序可能会出现在多个数据包中,每个数据包都有一个消息块。我无法按顺序将相同的ByteBuffer写入,因为这些块可能是无序的。:(
我是否遗漏了更聪明的方法?看起来,考虑到下面的块协议,没有办法按顺序将相同的ByteBuffer写入。 :(
有没有办法将这些N个ByteBuffer组合成一个而无需复制字节?我想象中可能会有某种智能实现ByteBuffer抽象类,它由这些ByteBuffer支持,并且只需调整指针和委托以正确地指向ByteBuffer。
如果你好奇我为什么需要这个,请查看来自BM&F/Bovespa的协议。他们将一条消息分成块,并且这些块可以以不同的数据包乱序传输,换句话说,相同的消息顺序可能会出现在多个数据包中,每个数据包都有一个消息块。我无法按顺序将相同的ByteBuffer写入,因为这些块可能是无序的。:(
我是否遗漏了更聪明的方法?看起来,考虑到下面的块协议,没有办法按顺序将相同的ByteBuffer写入。 :(
![enter image description here](https://istack.dev59.com/sgUtV.webp)
![enter image description here](https://istack.dev59.com/SPvQs.webp)
ByteBuffer
写入数据。这正是所有无索引的put()
方法所做的。你甚至可以在单个操作中将一个ByteBuffer
的全部内容完全放入另一个ByteBuffer
中。 - user207421