模块 java.base

接口 GatheringByteChannel

所有父级接口:
AutoCloseable , Channel , Closeable , WritableByteChannel
所有已知的实现类:
DatagramChannel , FileChannel , Pipe.SinkChannel , SocketChannel

public interface GatheringByteChannel extends WritableByteChannel
可以从一系列缓冲区写入字节的通道。

A 搜集写操作在一次调用中写入来自一个或多个给定缓冲区序列的字节序列。收集写入在实现网络协议或文件格式时通常很有用,例如,将数据分组到由一个或多个固定长度的标头和后跟可变长度的主体组成的段中。相似的散射读取操作在ScatteringByteChannel 接口中定义。

自从:
1.4
  • 方法总结

    修饰符和类型
    方法
    描述
    long
    write(ByteBuffer[] srcs)
    将给定缓冲区中的字节序列写入此通道。
    long
    write(ByteBuffer[] srcs, int offset, int length)
    从给定缓冲区的子序列中将字节序列写入此通道。

    在接口 java.nio.channels.Channel 中声明的方法

    close, isOpen

    在接口 java.nio.channels.WritableByteChannel 中声明的方法

    write
  • 方法详情

    • write

      long write(ByteBuffer [] srcs, int offset, int length) throws IOException
      从给定缓冲区的子序列中将字节序列写入此通道。

      试图写到r字节到这个通道,其中r是给定缓冲区数组的指定子序列中剩余的字节总数,即

       srcs[offset].remaining()
         + srcs[offset+1].remaining()
         + ... + srcs[offset+length-1].remaining()
      在调用此方法的那一刻。

      假设一个字节序列的长度n被写入,其中 0 <=n <=  r.该序列的前 srcs[offset].remaining() 个字节从缓冲区 srcs[offset] 写入,接下来的 srcs[offset+1].remaining() 个字节从缓冲区 srcs[offset+1] 写入,依此类推,直到写入整个字节序列。从每个缓冲区写入尽可能多的字节,因此每个更新缓冲区的最终位置(最后更新的缓冲区除外)保证等于该缓冲区的限制。

      除非另有说明,否则写操作只有在写完所有内容后才会返回r请求的字节。某些类型的通道,根据它们的状态,可能只写一些字节或者可能根本不写。例如,非阻塞模式下的套接字通道不能写入比套接字输出缓冲区中可用字节更多的字节。

      可以随时调用此方法。但是,如果另一个线程已经在该通道上启动了写操作,那么对该方法的调用将阻塞,直到第一个操作完成。

      参数:
      srcs - 要从中检索字节的缓冲区
      offset - 要从中检索字节的第一个缓冲区的缓冲区数组内的偏移量;必须为非负且不大于 srcs.length
      length - 要访问的最大缓冲区数;必须为非负且不大于 srcs.length - offset
      返回:
      写入的字节数,可能为零
      抛出:
      IndexOutOfBoundsException - 如果 offsetlength 参数的先决条件不成立
      NonWritableChannelException - 如果此通道未打开进行写入
      ClosedChannelException - 如果此通道关闭
      AsynchronousCloseException - 如果另一个线程在写操作正在进行时关闭此通道
      ClosedByInterruptException - 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
      IOException - 如果发生其他 I/O 错误
    • write

      long write(ByteBuffer [] srcs) throws IOException
      将给定缓冲区中的字节序列写入此通道。

      c.write(srcs) 形式的方法的调用与调用的行为完全相同

       c.write(srcs, 0, srcs.length);
      参数:
      srcs - 要从中检索字节的缓冲区
      返回:
      写入的字节数,可能为零
      抛出:
      NonWritableChannelException - 如果此通道未打开进行写入
      ClosedChannelException - 如果此通道关闭
      AsynchronousCloseException - 如果另一个线程在写操作正在进行时关闭此通道
      ClosedByInterruptException - 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
      IOException - 如果发生其他 I/O 错误