有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字节缓冲视图

你知道java的任何实现吗。尼奥。ByteBuffer封装了一组ByteBuffer实例,使它们看起来像单个实例,而不将字节复制到新的缓冲区中


共 (2) 个答案

  1. # 1 楼答案

    标准JavaAPI中没有一个。 Grizzly NIO框架有一个CompositeBuffer,但is使用它自己的缓冲区作为包装器:

    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);
    
  2. # 2 楼答案

    java中不存在任何实现。nio,但几乎所有通道都实现了GatheringByteChannelScatteringByteChannel,它们可以直接读写字节缓冲区数组

    ^{}

    long write(ByteBuffer[] srcs)

    Writes a sequence of bytes to this channel from the given buffers.

    ^{}

    long read(ByteBuffer[] dsts)

    Reads a sequence of bytes from this channel into the given buffers.

    上述方法也有部分版本,请参见上面的链接

    NIO的要点是尽可能降低开销,这种方法(与使用单独的对象包装缓冲区相反)不会比简单数组产生更多的开销。我认为您的是这个及其实现的预期用例