您是否知道有任何java.nio.ByteBuffer实现可以包装ByteBuffer实例的数组,使它们看起来像单个实例,而无需将字节复制到新的缓冲区中?
发布于 2013-03-02 02:24:06
java.nio中没有实现,但几乎所有的通道都实现了GatheringByteChannel和ScatteringByteChannel,它们可以直接读写ByteBuffers的数组。
GatheringByteChannel
long write(ByteBuffer[] srcs)
将给定缓冲区中的字节序列写入此通道。
和ScatteringByteChannel
long
read(ByteBuffer[] dsts)
将此通道中的字节序列读入给定的缓冲区。
上面的方法也有部分版本,请参阅上面的链接。
NIO的要点是具有尽可能低的开销,并且这种方式(而不是让单独的对象包装缓冲区)不会比简单的数组产生更多的开销。我认为您的用例就是这个和它们的实现的预期用例。
发布于 2013-03-02 02:31:17
在标准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);https://stackoverflow.com/questions/15164068
复制相似问题