它是安全返回,同时抛出:EOFException发生
当我复制到Inputstream
OutputStream
,我有时会出现EOFException
。它是安全返回,同时抛出:EOFException发生
从EOFException
的文档可以通过使用数据流输入到信号流的末尾。
那么这是否意味着当发生EOFException
时可以安全返回?
public static void copy(InputStream in, OutputStream out) throws IOException { byte[] buff = new byte[BUF_SIZE];
int n = -1;
try {
while ((n = in.read(buff)) >= 0) {
out.write(buff, 0, n);
}
} catch (EOFException eof) {
// reach EOF , return
}
}
回答:
EOFException类不能在InputStream.read被抛出(字节[]),它的API表示抛出IOException,“如果第一个字节由于文件结尾以外的任何原因而无法读取......”。
EOFException被用于其他目的,例如。如果输入流在读取所有字节之前到达结尾,java.io.DataInputStream.readFully(byte [] b)可能会抛出EOFException。
但是,在任何情况下,EOFException类都表示出现了错误,你不应该忽视它,并返回,就好像什么都没有发生。
回答:
如果从InputStream
正确读取,这个异常将不会抛出。预计在没有更多数据时达到文件末尾。最后致电read
将返回-1
并且所有后来致电read
的电话都将抛出异常。在发现异常时返回值是安全的,但您应该完全避免该错误。像这样的东西应该做的:
public static void copy(InputStream in, OutputStream out) throws IOException { byte[] buff = new byte[BUF_SIZE];
int n = -1;
try {
while ((n = in.read(buff)) != -1) { //See the JavaDoc
out.write(buff, 0, n);
}
catch (IOException eof) {
e.printStackTrace(); //So you know if something happens...
}
}
顺便说一句,在read
方法抛出IOException
,而不是一个EOFException
...
回答:
InputStream.read(byte[])
只会尝试填充尽可能多的字节,因为它可以读入byte[]
,如果它到达EOF,将返回-1
。所以EOFException
不会被正常抛出。 EOFException
因意外情况而被抛出。因此,理想情况下,应该抛出此异常而不是捕获它,因为这意味着逻辑本身存在错误。
您应该使用InputStream.read(byte[]) == -1
来检查EOF。使用异常来确定是否到达流尾是一个坏主意,因为异常很昂贵。
以上是 它是安全返回,同时抛出:EOFException发生 的全部内容, 来源链接: utcz.com/qa/265254.html