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

Java 为什么输入与“比较”-“1”吗;?,java,file-io,primitive-types,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");

当我浏览示例代码时,我正在刷新自己的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呢?

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

读这篇文章太棒了

从Oracle文档:

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

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


从以下文件中:

公共int read() 抛出IOException

因此read()返回整数,而不是字节,因此可以将其分配给
int
变量。 请注意,整数可以隐式转换为整数,而不会丢失。也可从文件中获得:

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


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

同意,Mike Nakis的回答非常适合解释这一点。