如何解决Inputstream 的末尾是否有 -1?
我对编程很陌生。
在阅读 Oracle Java 教程“Basic 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 是否在最后添加?
感谢大家的关注。我希望你有一个美妙的西尔维斯特。
解决方法
要补充其他答案,解决这个问题的工具是 the documentation。
对于 FileInputStream 的“读取”方法:
public int read()
抛出 IOException
从此输入流中读取一个字节的数据。如果尚无可用输入,则此方法会阻塞。指定者: 在类 InputStream 中读取
返回:数据的下一个字节,如果 已到达文件末尾。
这是确定的。
所有标准 Java 类都以这种方式记录。在不确定的情况下,快速检查会让您放心。
,编辑:“在输入期间意外到达文件结尾或流结尾的信号。 此异常主要用于数据输入流,它通常需要特定格式的二进制文件,并且流结束是异常情况。大多数其他输入流在流结束时返回一个特殊值。"
正确的方法是捕获 EOFException
以找出文件是否结束,但在这种情况下,将字符读取为 EOF
-1 is returned
而不是 null
,它可以工作,因为负 ascii 没有字符,检查 while ((c = in.read()) >= 0) {}
是一样的,所以你可以使用 != -1
,它会工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。