我很难理解这段代码是如何工作的。它使用字节流:
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("x.txt");
int c;
while((c = in.read()) != -1) {
out.write(c);
}
我不明白的是while
循环。输入流是否像索引递增的数组一样工作,并将该索引传递给输出流?
如果有人能够解释,那将非常感激。
答案 0 :(得分:1)
read()
从流中读取单个字节。该字节作为int
值返回(0-255,因为Java中没有无符号字节)。如果您从流中收到-1
,则表示流末EOS
(使用FileInputStream
时该文件的结尾)。
关于while循环:
while((c = in.read()) != -1)
首先执行 in.read()
,将值赋给c
,然后将布尔比较c != -1
计算为while-loop参数。
答案 1 :(得分:1)
in.read()就像一个for循环。它返回文件中的下一个字节,并将其迭代器增加1。在文本“Hello World”的文件中,in.read()最初会产生“H”。然后in.read()将产生'e',依此类推,直到文件结束。
在文件末尾,in.read()无法读取更多字节。该函数旨在通过返回-1从此状态正常退出。当然,字节的值不能为-1;因此,只要从此方法获得值-1,就可以确定它位于文件的末尾。
while((cin = in.read())!= - 1){}做两件事。首先,它将c设置为等于in.read();然后,它检查它是否等于-1。如果没有,那么它进入循环体。括号中的东西(即使它们不一定是算术的)总是在括号之外的事物之前进行评估。