public interface ReadableByteChannel extends Channel
在任何给定的时间,只有一个可读通道上的读操作才能进行。 如果一个线程在通道上启动读取操作,那么尝试启动另一个读取操作的任何其他线程将阻塞,直到第一个操作完成。 其他类型的I / O操作是否可以与读取操作同时进行取决于通道的类型。
int read(ByteBuffer dst) throws IOException
尝试从通道读取r个字节,其中r是缓冲区中剩余的字节数,即dst.remaining() ,在此方法被调用的时刻。
假设长度为n的字节序列被读取,其中0 <= n <= r 。 该字节序列将被转移到缓冲器,使得序列中的第一个字节是在索引p和最后一个字节是在索引p + -Ñ1,其中p是该缓冲区的在调用此方法的瞬间位置。 一旦返回缓冲区的位置将等于p + n ; 其限制将不会改变。
读取操作可能不会填充缓冲区,实际上它可能不会读取任何字节。 是否这样做取决于渠道的性质和状态。 例如,非阻塞模式的套接字通道不能再读取比从套接字的输入缓冲区可以立即获得的任何字节数; 类似地,文件通道不能读取比保留在文件中的任何更多的字节。 但是,如果通道处于阻塞模式,并且缓冲区中至少剩余一个字节,则该方法将被阻塞,直到读取至少一个字节为止。
可以随时调用此方法。 但是,如果另一个线程已经在该通道上启动了读取操作,那么此方法的调用将阻塞,直到第一个操作完成。
dst
- 要传输字节的缓冲区
NonReadableChannelException
- 如果此频道未打开阅读
ClosedChannelException
- 如果此通道关闭
AsynchronousCloseException
- 如果另一个线程在读取操作正在进行时关闭此通道
ClosedByInterruptException
- 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
IOException
- 如果发生其他I / O错误