它是安全返回,同时抛出:EOFException发生

当我复制到InputstreamOutputStream,我有时会出现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

回到顶部