给你看些代码!你就明白是怎么回事了!其实内部有进行判断,但是并没有进行处理!
而是直接抛出了异常!一下是JDK 的源代码:- public void readFully(byte[] b, int off, int len, boolean copy)
- throws IOException
- {
- while (len > 0) {
- int n = read(b, off, len, copy);
- if (n < 0) {
- throw new EOFException();
- }
- off += n;
- len -= n;
- }
- }
复制代码 从这里不难看出!这里对异常并没有处理!而是直接抛出异常!
这里还要注意的一个问题就是其实 readFully和read的区别。
readFully方法并不是说一下就把整个文件读完了,不用去管是否到达文件末尾的异常。
readFully只是在读取数据的时候,会一直把缓冲区读满,否则一直处于阻塞状态而等待读取。
而read方法只是将字节流中的数据读完。那么数据在TCP协议传送的过程中,可能输入流接受到的数据并不完全,只是其中的一部分。而如果这时候的缓冲区没有满的话,readFully将会继续等待。知道缓冲区装满。希望对你有用! |