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

Interface ReadableByteChannel

    • 方法详细信息

      • read

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

        尝试从通道读取r个字节,其中r是缓冲区中剩余的字节数,即dst.remaining() ,在此方法被调用的时刻。

        假设长度为n的字节序列被读取,其中0 <= n <= r 该字节序列将被转移到缓冲器,使得序列中的第一个字节是在索引p和最后一个字节是在索引p + Ñ - 1 ,其中p是该缓冲区的在调用此方法的瞬间位置。 缓冲区的返回位置将等于p + n ; 其限制将不会改变。

        读取操作可能不会填充缓冲区,实际上它可能不会读取任何字节。 是否这样做取决于渠道的性质和状态。 例如,非阻塞模式的套接字通道不能再读取比从套接字的输入缓冲区立即可用的任何字节数; 类似地,文件通道不能读取比保留在文件中的任何更多的字节。 但是,如果通道处于阻塞模式,并且缓冲区中至少剩余一个字节,则该方法将被阻塞,直到读取至少一个字节为止。

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

        参数
        dst - 要传输字节的缓冲区
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        NonReadableChannelException - 如果此频道未打开阅读
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误