我对编程很陌生。
在阅读oracle java教程“基本i/o”中的byte streams一文时,我偶然发现了以下代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
我不明白while循环的条件。-1是消息结束的信号吗?fileoutputstream是否将其添加到末尾?
谢谢大家的关注。我希望你有一个完美的西尔维斯特。
2条答案
按热度按时间brgchamk1#
为了补充其他答案,解决这个问题的工具是文档。
对于fileinputstream的“read”方法:
公共int read()
引发ioexception
从这个输入流中读取一个字节的数据。如果还没有可用的输入,则此方法将阻塞。指定者:读入类inputstream
返回:数据的下一个字节,如果到达文件结尾,则返回-1。
这是确定的。
所有标准java类都是以这种方式记录的。如果不确定,快速检查会让你放心。
kyks70gy2#
edit:“表示在输入过程中意外到达文件结尾或流结尾。此异常主要由数据输入流使用,数据输入流通常需要特定格式的二进制文件,并且流结束是一种不寻常的情况。大多数其他输入流在流结束时返回一个特殊值。”
正确的方法是抓住
EOFException
要知道这是不是文件的结尾,但在这种情况下读字符作为EOF
-1 is returned
而不是null
,它工作是因为没有字符表示负ascii,检查也是一样的while ((c = in.read()) >= 0) {}
,所以您可以使用!= -1
它会起作用的。