扩展java.nio.ByteBuffer的Java循环字节缓冲区

LIN*_*N78 9 java buffer bytebuffer

我在SO和其他地方看到过的每个Java循环字节缓冲区实现都没有扩展java.nio.ByteBuffer,对我来说这是与SocketChannel一起使用所必需的.有没有人知道扩展ByteBuffer的开源实现.我试着写下我自己的路,但是当我意识到位置和剩余的功能是最终的时候我被卡住了,我将覆盖那些以调整头部并防止缓冲区溢出异常.在通过套接字通道发送5000条消息时,每个人都需要我将东西复制到线性缓冲区的头部,这会增加大约450毫秒或90us的每条消息(其中包含10个数据包,因此每个数据包为9us).现在,我能想到的唯一方法是覆盖每一个方法并重写所有方法.有任何想法吗?

Pet*_*rey 6

您可以使缓冲区比一条消息大得多,而不是创建循环缓冲区.假设最大消息大小为N个字节.创建一个100*N字节的缓冲区只有compact()ByteBuffer,当剩下少于N个字节时.这将减少复制量100倍.

另一个优化是在没有剩余数据的情况下压缩()ByteBuffer,因为这非常快.


bes*_*sss 6

你不能扩展java.nio.ByteBuffer,就这么简单.c-tor是包私有的.它不起作用,b/c的主要思想是将地址传递给某些C代码.此外,您无法覆盖任何内容,因为许多方法都是最终的.ByteBuffers已经设计了速度,一些决定可能看起来很奇怪,但它们还可以.

java.nio.channels.GatheringByteChannel并且java.nio.channels.ScatteringByteChannel值得一试,虽然有很多依赖于实现(本机C)使它们有用.