本文介紹了是否有一個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?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,