1吗?

ou6hu8tu  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(1112)

我对编程很陌生。
在阅读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是否将其添加到末尾?
谢谢大家的关注。我希望你有一个完美的西尔维斯特。

brgchamk

brgchamk1#

为了补充其他答案,解决这个问题的工具是文档。
对于fileinputstream的“read”方法:
公共int read()
引发ioexception
从这个输入流中读取一个字节的数据。如果还没有可用的输入,则此方法将阻塞。指定者:读入类inputstream
返回:数据的下一个字节,如果到达文件结尾,则返回-1。
这是确定的。
所有标准java类都是以这种方式记录的。如果不确定,快速检查会让你放心。

kyks70gy

kyks70gy2#

edit:“表示在输入过程中意外到达文件结尾或流结尾。此异常主要由数据输入流使用,数据输入流通常需要特定格式的二进制文件,并且流结束是一种不寻常的情况。大多数其他输入流在流结束时返回一个特殊值。”
正确的方法是抓住 EOFException 要知道这是不是文件的结尾,但在这种情况下读字符作为
EOF -1 is returned 而不是 null ,它工作是因为没有字符表示负ascii,检查也是一样的 while ((c = in.read()) >= 0) {} ,所以您可以使用 != -1 它会起作用的。

相关问题