模块  java.base
软件包  java.nio.channels

Interface GatheringByteChannel

    • 方法详细信息

      • 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 - If some other I/O error occurs