是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer? [英] Is there a Java ByteBuffer implementation that combines multiple backing ByteBuffers under the hood?

查看:36
本文介绍了是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个或多个包含单个消息部分的ByteBuffer。现在我想阅读此消息,但我不想将N字节缓冲区复制到单个字节缓冲区中。我的解析器需要一个包含完整消息的ByteBuffer,但我的消息被分成N个ByteBuffer。

有没有一种方法可以在不复制字节的情况下将这N个字节缓冲区合并为一个单独的缓冲区?我想象着ByteBuffer抽象类的某种智能实现,它由这些ByteBuffer幕后支持,只需将指针和委托调整到正确的ByteBuffer即可。

如果您对我为什么需要这样做感到好奇,请查看BM&;F/Bovespa提供的以下协议。它们将消息分成块,它们可能会在不同的包中打乱顺序,换句话说,相同的消息序列可能会出现在多个包中,每个包都有一个消息块。我不能按顺序写入相同的ByteBuffer,因为这些块可能会乱序。:(

我是不是错过了一些更聪明的东西?在给定下面的块协议的情况下,看起来没有办法顺序地写入相同的字节缓冲区。:(

推荐答案

我认为您正在寻找的数据结构称为链缓冲区。在内部,它是一个动态增长的字节数组或缓冲区的集合(例如,在Java中为ArrayList),而在外部,该结构的行为类似于常规的Buffer

如果您处理性能问题,它可能会非常方便,尽管某些操作的实现可能不是完全琐碎的(例如,搜索给定模式的位置)。

我所知道的唯一公共Java实现是ChainBufferinKrakenby NCHOVY(尽管不再维护)。

这篇关于是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆