public interface ReadableByteChannel extends Channel
在一个可读的信道上只有一个读操作可能在任何给定的时间内都有进步。如果一个线程启动了一个通道上的读操作,那么任何试图启动另一个读操作的其他线程将阻塞,直到第一个操作完成。是否其他类型的I / O操作可以同时进行一个读操作取决于信道的类型。
int read(ByteBuffer dst) throws IOException
尝试读到R字节从通道,其中R是剩余的缓冲区,即dst.remaining()字节数,目前这个方法被调用。
假设一个长度字节序列N是阅读,在0 <= N <= R.这个字节序列将被转移到缓冲区,序列中的第一个字节在指数P和最后一个字节在指数P + N - 1,其中P是缓冲区的位置,目前这个方法被调用。在返回的缓冲区的位置将等于P + N;极限将不会改变。
一个读操作可能无法填充缓冲区,事实上它可能根本没有读过任何字节。它是否这样做取决于通道的性质和状态。例如,在非阻塞模式下的套接字通道不能读取比套接字的输入缓冲器立即可用的更多的字节;同样,一个文件通道不能读取任何大于保持在文件中的字节数。它是保证,但是,如果一个通道是在阻塞模式,并有至少一个字节留在缓冲区,那么这种方法将阻止,直到至少一个字节读取。
这种方法可能在任何时候被调用。如果另一个线程已经在这个通道上启动了一个读操作,那么这个方法的调用将阻塞,直到第一个操作完成。
dst
-缓冲区中的字节都被转移
NonReadableChannelException
-如果这通道不打开阅读
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道而读操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程在读操作中,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.