Module  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 <= Ñ <= 直到该序列的第一个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