本文介绍了是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个或多个包含单个消息部分的ByteBuffer。现在我想阅读此消息,但我不想将N字节缓冲区复制到单个字节缓冲区中。我的解析器需要一个包含完整消息的ByteBuffer,但我的消息被分成N个ByteBuffer。
有没有一种方法可以在不复制字节的情况下将这N个字节缓冲区合并为一个单独的缓冲区?我想象着ByteBuffer抽象类的某种智能实现,它由这些ByteBuffer幕后支持,只需将指针和委托调整到正确的ByteBuffer即可。如果您对我为什么需要这样做感到好奇,请查看BM&;F/Bovespa提供的以下协议。它们将消息分成块,它们可能会在不同的包中打乱顺序,换句话说,相同的消息序列可能会出现在多个包中,每个包都有一个消息块。我不能按顺序写入相同的ByteBuffer,因为这些块可能会乱序。:(
我是不是错过了一些更聪明的东西?在给定下面的块协议的情况下,看起来没有办法顺序地写入相同的字节缓冲区。:(
推荐答案
我认为您正在寻找的数据结构称为链缓冲区。在内部,它是一个动态增长的字节数组或缓冲区的集合(例如,在Java中为ArrayList
),而在外部,该结构的行为类似于常规的Buffer
。
如果您处理性能问题,它可能会非常方便,尽管某些操作的实现可能不是完全琐碎的(例如,搜索给定模式的位置)。
我所知道的唯一公共Java实现是ChainBuffer
inKrakenby NCHOVY(尽管不再维护)。
这篇关于是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!