-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
- All Known Subinterfaces:
-
ByteChannel
,ScatteringByteChannel
,SeekableByteChannel
- 所有已知实现类:
-
DatagramChannel
,FileChannel
,Pipe.SourceChannel
,SocketChannel
public interface ReadableByteChannel extends Channel
一个可以读取字节的通道。在任何给定时间,可读信道上只有一个读操作正在进行中。 如果一个线程在通道上启动读操作,则尝试启动另一个读操作的任何其他线程将阻塞,直到第一个操作完成。 其他类型的I / O操作是否可以与读操作同时进行取决于通道的类型。
- 从以下版本开始:
- 1.4
-
-
方法详细信息
-
read
int read(ByteBuffer dst) throws IOException
从该通道读取一个字节序列到给定的缓冲区。尝试从通道读取最多r个字节,其中r是缓冲区中剩余的字节数,即
dst.remaining()
,此时调用此方法。假设读取长度为n的字节序列,其中
0
<=
n<=
r 。 该字节序列将被传送到缓冲区,以便序列中的第一个字节位于索引p ,最后一个字节位于索引p+
n-
1
,其中p是调用此方法时缓冲区的位置。 返回时,缓冲区的位置将等于p+
n ; 它的限制不会改变。读操作可能不会填充缓冲区,实际上它根本不会读取任何字节。 它是否这样做取决于渠道的性质和状态。 例如,处于非阻塞模式的套接字通道不能读取比套接字输入缓冲区中立即可用的字节数更多的字节数。 类似地,文件通道不能再读取保留在文件中的字节数。 但是,可以保证,如果通道处于阻塞模式且缓冲区中至少剩余一个字节,则此方法将阻塞,直到读取至少一个字节。
可以随时调用此方法。 但是,如果另一个线程已经在此通道上启动了读操作,则此方法的调用将阻塞,直到第一个操作完成。
- 参数
-
dst
- 要传输字节的缓冲区 - 结果
-
如果通道已到达流末尾,则读取的字节数(可能为零)或
-1
- 异常
-
NonReadableChannelException
- 如果未打开此频道进行阅读 -
ClosedChannelException
- 如果此渠道已关闭 -
AsynchronousCloseException
- 如果另一个线程在读操作正在进行时关闭此通道 -
ClosedByInterruptException
- 如果另一个线程在读操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态 -
IOException
- 如果发生其他一些I / O错误
-
-