Java Inputstream的末尾是否有-1?

Java Inputstream的末尾是否有-1?,java,fileinputstream,fileoutputstream,Java,Fileinputstream,Fileoutputstream,我对编程很陌生 在阅读Oracle Java教程中的“基本I/O”一文时,我了解了以下代码: import java.io.FileInputStream; 导入java.io.FileOutputStream; 导入java.io.IOException; 公共类CopyBytes{ 公共静态void main(字符串[]args)引发IOException{ FileInputStream in=null; FileOutputStream out=null; 试一试{ in=新文件输入流(

我对编程很陌生

在阅读Oracle Java教程中的“基本I/O”一文时,我了解了以下代码:

import java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
公共类CopyBytes{
公共静态void main(字符串[]args)引发IOException{
FileInputStream in=null;
FileOutputStream out=null;
试一试{
in=新文件输入流(“xanadu.txt”);
out=newfileoutputstream(“outreach.txt”);
INTC;
而((c=in.read())!=-1){
写出(c);
}
}最后{
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
}
}
}
我不了解while循环的条件。-1是消息结束的某种标志吗?FileOutputStream是否在末尾添加它

谢谢大家的关注。我希望您有一个精彩的sylvester。

编辑:“表示在输入过程中意外到达文件结尾或流结尾。 此异常主要用于数据输入流,通常需要特定格式的二进制文件,并且流结束是一种异常情况。大多数其他输入流在流结束时返回一个特殊值。”


正确的方法是捕获
EOFException
以确定它是否是文件的结尾,但是在这种情况下,读取字符作为
EOF
-1返回
而不是
null
,它工作是因为负ascii没有字符,检查
时((c=in.read())>=0){}
,,所以你可以使用
!=-1
,它会起作用。

要添加到其他答案中,解决这个问题的工具是

对于FileInputStream的“读取”方法:

public int read()
抛出IOException

从该输入流读取一个字节的数据。如果没有可用的输入,此方法将阻止。指定人: 读入类输入流

返回:数据的下一个字节,如果 到达文件的末尾

这是确定的


所有标准Java类都是以这种方式记录的。如果不确定,快速检查会让您放心。

请参阅-“-1如果到达终点”非常感谢。顺便问一下,“西尔维斯特”是什么?这在英语中并不常见也许是新年吧?因为这是一年中的最后一天,它的拼写是西尔维斯特。是的,我的意思是新年。它在我的母语中是“Silvester”,我认为在英语中也是一样的,因为它是一个圣人的名字,不同语言之间的名字变化不大。没有任何
EOFEException
抛出捕捉。如果你在(true){in.read()}时写,在eof之后你会有异常。。。您不同意吗?它不同意,它只是返回
-1
。您从输入流中读取的是字节,而不是ASCII字符。@DeviKhositashvili它将继续返回
-1
,以指示文件的结尾,但它不会抛出
EOFEException