我很难理解这段代码是如何工作的。它使用的是字节流:
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("x.txt");
int c;
while((c = in.read()) != -1) {
out.write(c);
}我不理解的是while循环。输入流是否像数组一样工作,其中索引递增,并将索引传递到输出流?
如果有人能解释一下,我将不胜感激。
发布于 2013-03-04 01:09:22
我想,in.read()的作用类似于一个for循环。它返回文件中的下一个字节,并将其迭代器递增1。在文本为"Hello World“的文件中,in.read()最初会生成'H‘。然后,in.read()将生成'e',依此类推,直到文件结束。
在文件末尾,in.read()无法读取更多字节。该函数旨在通过返回-1来从容地退出此状态。当然,字节的值不能为-1;因此,无论何时从该方法获得值-1,都可以确保它位于文件的末尾。
而((cin=in.read())!=-1){}做两件事。首先,它将c设置为等于in.read();然后,检查它是否等于-1。如果不是,则进入循环体。括号中的东西(即使它们不一定是算术的)总是在括号外的东西之前求值。
发布于 2013-03-04 01:05:07
read()从流中读取单个字节。该字节作为Java值返回(0-255,因为int中没有无符号字节)。如果您从流接收-1,这意味着结束流的EOS (在使用FileInputStream时是文件的结束)。
关于while循环:
while((c = in.read()) != -1)首先执行in.read(),将值赋给c,然后将布尔比较循环作为while- c != -1参数进行求值。
https://stackoverflow.com/questions/15188139
复制相似问题