您是否知道 java.nio.ByteBuffer 的任何实现,它包装了 ByteBuffer 实例数组,使它们看起来像单个实例,而无需将字节复制到新缓冲区中?
问问题
1313 次
2 回答
5
java.nio 中不存在实现,但几乎所有通道都实现GatheringByteChannel
并且ScatteringByteChannel
可以直接读取和写入 ByteBuffers 数组。
long write(ByteBuffer[] srcs)
从给定的缓冲区将字节序列写入此通道。
长
read(ByteBuffer[] dsts)
从此通道中读取一个字节序列到给定的缓冲区中。
上述方法也有部分版本,请参见上面的链接。
NIO 的重点是尽可能降低开销,并且这种方式(与使用单独的对象包装缓冲区相反)不会产生比简单数组更多的开销。我认为你的是这个及其实现的预期用例。
于 2013-03-01T18:24:05.577 回答
1
标准 Java API 中没有一个。Grizzly NIO 框架有一个 CompositeBuffer,但它使用它自己的缓冲区作为包装器:
import org.glassfish.grizzly.Buffer;
import org.glassfish.grizzly.memory.BuffersBuffer;
import org.glassfish.grizzly.memory.CompositeBuffer;
....
ByteBuffer byteBuffer = ....;
HeapMemoryManager mm = new HeapMemoryManager();
CompositeBuffer buffer = BuffersBuffer.create();
Buffer b = mm.wrap(byteBuffer);
buffer.append(b);
于 2013-03-01T18:31:16.863 回答