首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteStream问题

ByteStream问题
EN

Stack Overflow用户
提问于 2013-03-04 01:01:49
回答 2查看 106关注 0票数 0

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

代码语言:javascript
复制
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("x.txt");
int c;

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

我不理解的是while循环。输入流是否像数组一样工作,其中索引递增,并将索引传递到输出流?

如果有人能解释一下,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。如果不是,则进入循环体。括号中的东西(即使它们不一定是算术的)总是在括号外的东西之前求值。

票数 1
EN

Stack Overflow用户

发布于 2013-03-04 01:05:07

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

关于while循环:

代码语言:javascript
复制
while((c = in.read()) != -1)

首先执行in.read(),将值赋给c,然后将布尔比较循环作为while- c != -1参数进行求值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15188139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档