public interface ReadableByteChannel
implements Channel
java.nio.channels.ReadableByteChannel |
Known Indirect Subclasses |
一个可以读取字节的通道。
在任何给定的时间,只有一个可读通道的读操作可能正在进行。 如果一个线程启动对某个通道的读取操作,则任何尝试启动另一个读取操作的其他线程都将被阻塞,直到第一个操作完成。 其他类型的I / O操作是否可以与读取操作同时进行取决于通道的类型。
Public methods |
|
---|---|
abstract int |
read(ByteBuffer dst) 从此通道读取一系列字节到指定的缓冲区中。 |
Inherited methods |
|
---|---|
From interface java.nio.channels.Channel
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
int read (ByteBuffer dst)
从此通道读取一系列字节到指定的缓冲区中。
尝试从通道读取多达 r个字节,其中 r是在调用此方法时缓冲区中剩余的字节数,即 dst.remaining() 。
假设一个长度为n的字节序列被读取,其中0 <= n <= r 。 该字节序列将被传送到缓冲区中,以便序列中的第一个字节位于索引p处 ,最后一个字节位于索引p + n - 1 ,其中p是此方法调用时缓冲区的位置。 返回时,缓冲区的位置将等于p + n ; 其限制不会改变。
读取操作可能不会填充缓冲区,实际上它可能根本不读取任何字节。 是否这样做取决于频道的性质和状态。 例如,非阻塞模式下的套接字通道无法读取比套接字输入缓冲区立即可用的更多字节; 同样,文件通道不能读取比保留在文件中的字节更多的字节。 但是,如果一个通道处于阻塞模式并且至少有一个字节保留在缓冲区中,则该方法将被阻止,直到至少读取一个字节为止。
这个方法可以在任何时候调用。 然而,如果另一个线程已经在这个通道上启动了一个读操作,那么这个方法的调用将会阻塞,直到第一个操作完成。
Parameters | |
---|---|
dst |
ByteBuffer : The buffer into which bytes are to be transferred |
Returns | |
---|---|
int |
The number of bytes read, possibly zero, or -1 if the channel has reached end-of-stream |
Throws | |
---|---|
NonReadableChannelException |
If this channel was not opened for reading |
ClosedChannelException |
If this channel is closed |
AsynchronousCloseException |
If another thread closes this channel while the read operation is in progress |
ClosedByInterruptException |
If another thread interrupts the current thread while the read operation is in progress, thereby closing the channel and setting the current thread's interrupt status |
IOException |
If some other I/O error occurs |