Is there a Java ByteBuffer implementation that combines multiple backing ByteBuffers under the hood?(是否有一个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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:是否有一个Java ByteBuffer实现在幕后结合了多个支持ByteBuffer?
基础教程推荐
- 存储 20 位数字的数据类型 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
