为什么输入与" -1"?相比较?

时间:2016-12-15 02:42:03

标签: java file-io primitive-types

当我查看示例代码时,我在I / O上刷新了自己,我看到了让我感到困惑的事情:

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?

2 个答案:

答案 0 :(得分:2)

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

阅读这篇真棒answer

来自Oracle docs:

  

public abstract int read()                     throws IOException从输入流中读取下一个数据字节。值字节作为int返回,范围为0   如果没有可用的字节,因为流的末尾已经存在   到达时,返回值-1。此方法阻塞直到输入数据   可用,检测到流的末尾,或者是异常   抛出。子类必须提供此方法的实现。

     

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

答案 1 :(得分:0)

来自FileInputStream.read()的文档:

  

public int read()            抛出IOException

因此read()返回整数而不是字节,因此可以将其分配给int变量。 请注意,int可以隐式转换为int而不会丢失。同样来自文档:

  

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

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