ByteStream问题

时间:2013-03-03 17:01:49

标签: java

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

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

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

我不明白的是while循环。输入流是否像索引递增的数组一样工作,并将该索引传递给输出流?

如果有人能够解释,那将非常感激。

2 个答案:

答案 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。如果没有,那么它进入循环体。括号中的东西(即使它们不一定是算术的)总是在括号之外的事物之前进行评估。