Module  java.base
软件包  java.nio.channels

Interface ScatteringByteChannel

    • 方法详细信息

      • read

        long read​(ByteBuffer[] dsts,
                  int offset,
                  int length)
           throws IOException
        从该通道读取字节序列到给定缓冲区的子序列中。

        该方法的调用尝试从该通道读取r个字节,其中r是给定缓冲区数组的指定子序列剩余的总字节数,也就是说,

         dsts[offset].remaining()
             + dsts[offset+1].remaining()
             + ... + dsts[offset+length-1].remaining()
        在此方法被调用的时刻。

        假设长度为n的字节序列被读取,其中0 <= n <= r 该序列的最初dsts[offset].remaining()个字节被传送到缓冲区dsts[offset] ,直到下一个dsts[offset+1].remaining()字节被传送到缓冲区dsts[offset+1]等等,直到整个字节序列被传送到给定的缓冲区。 尽可能多的字节被传送到每个缓冲器中,因此除了最后更新的缓冲器之外,每个更新的缓冲器的最终位置被保证等于该缓冲器的限制。

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

        参数
        dsts - 要传输字节的缓冲区
        offset - 要传输字节的第一个缓冲区的缓冲区中的偏移量; 必须是非负数,不得大于dsts.length
        length - 要访问的缓冲区的最大数量; 必须是非负数,不得大于dsts.length - offset
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        IndexOutOfBoundsException - 如果 offsetlength参数的前提条件不成立
        NonReadableChannelException - 如果此通道未打开阅读
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • read

        long read​(ByteBuffer[] dsts)
           throws IOException
        从该通道读取到给定缓冲区的字节序列。

        对这种c.read(dsts)形式的方法的调用与调用的方式完全相同

         c.read(dsts, 0, dsts.length);
        参数
        dsts - 要传输字节的缓冲区
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        NonReadableChannelException - 如果此通道未打开读取
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - If some other I/O error occurs