0

我很难理解这段代码是如何工作的。它使用字节流:

in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("x.txt");
int c;

while((c = in.read()) != -1) {
    out.write(c);   
}

我不明白的是while循环。输入流是否像数组一样工作,其中索引正在递增,并且该索引被传递到输出流?

如果有人可以解释,将不胜感激。

4

2 回答 2

1

read()从流中读取单个字节。该字节作为int值返回(0-255,因为 Java 中没有无符号字节)。如果您-1从流中接收,则表示流的结尾EOS(使用 时是文件的结尾FileInputStream)。


关于while循环:

while((c = in.read()) != -1)

in.read()首先执行,将值分配给c,然后将布尔比较c != -1评估为 while-loop 参数。

于 2013-03-03T17:05:07.487 回答
1

我猜 in.read() 就像一个 for 循环。它返回文件中的下一个字节,并将迭代器加一。在带有文本“Hello World”的文件中,in.read() 最初会产生“H”。in.read() 然后会产生'e',依此类推,直到文件结束。

在文件末尾, in.read() 无法读取更多字节。该函数旨在通过返回 -1 优雅地退出此状态。当然,字节不能有 -1 的值;因此,无论何时您从该方法中获得 -1 值,您都可以确定它位于文件末尾。

while ((cin=in.read())!=-1){} 做了两件事。首先,它设置 c 等于 in.read(); 然后,它检查它是否等于-1。如果不是,则它进入循环体。括号中的事物(即使它们不一定是算术)总是在括号外的事物之前评估。

于 2013-03-03T17:09:22.147 回答