为什么输入与“-1”比较?

问题描述:

我刷新自己的I/O,而我去了我看到的东西,弄得我的示例代码:为什么输入与“-1”比较?

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); 
     } 

如何int值(C),可以被分配给数据从一个字节输入流(in.read())?那么为什么while循环等待它不等于-1?

这个(c = in.read())将返回-1当达到输入结束,因此while循环将停止。

阅读这个真棒answer

从甲骨文文档:

public abstract int read() 抛出IOException读取数据的从输入流的下一个字节。值字节在范围0 至255范围内返回为int。如果由于流尾已到达 而没有可用字节,则返回值-1。此方法会阻止,直到输入数据 可用,检测到流的结尾,或抛出异常 。子类必须提供此方法的实现。

返回:数据的下一个字节,或-1如果该流的结尾是 达到。 抛出:IOException - 如果发生I/O错误。

+1

同意,Mike Nakis的答案非常适合解释这些东西。 –

FileInputStream.read()的文档:))

公共INT读( 抛出IOException异常

因此读(返回整数,而不是字节,因此它可以被分配到一个int变量。 请注意,整数可以隐式转换为整数,无损失。同样来自文档:

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

对-1的循环检查确定是否已到达文件结尾,如果是,则停止循环。