黑马程序员技术交流社区
标题:
IO流里关于读取的问题
[打印本页]
作者:
Aenon
时间:
2014-3-13 22:05
标题:
IO流里关于读取的问题
伪代码一:
FileReader fr = new FileReader("IOdemo.java");
for(;fr.read()!=-1;)
System.out.print((char)fr.read());
fr.close();
伪代码二:
FileReader fr = new FileReader("IOdemo.java");
int ch = 0;
for(;(ch=fr.read())!=-1;)
System.out.print((char)ch);
fr.close();
这不是一样的吗,怎么代码一打出来的是乱码,困惑...
作者:
luoanjade
时间:
2014-3-15 08:12
本帖最后由 luoanjade 于 2014-3-15 08:14 编辑
首先,你上面两种写法是不一样的。代码一错,代码二对。
伪代码一:
FileReader fr = new FileReader("IOdemo.java");
for(;fr.read()!=-1;) //这次读取仅用于判断,后面的打印并非是它
System.out.print((char)fr.read()); //又读了一次,这次读取是在你for循环里面读完后的基础上。这次读出的结果被打印出来了
fr.close();
给你个例子:
文件中存有这样的数据:abcdefg
代码一打出来的结果是:bdf? (因为for里面的最后一次读取是g,然而他并不等于-1,所以for循环没有停,到循环里面再读一次,结果就读到了末尾了,打出来的这个问号应该就是文件末尾的标志-1。)
使用你的代码一来分析一下:
for(;fr.read()!=-1;) //在这里读到的是:a,c,e,g,-1(读到这里结束)
System.out.print((char)fr.read()); //这里读到的是:b,d,f,-1(读到这里也是末尾,但并没有结束,被打印出来了)
还有,楼主为何不使用while呢,非要写这么别扭的for循环。
作者:
也许依然
时间:
2014-3-15 09:19
FileReader继承了InputStreamReader的read()方法,它返回读取的字符,如果已到达流的末尾,则返回 -1
伪代码1中,在for循环内的打印语句中又调用了一次read()方法,所以两段代码的结果是不一样的
作者:
李猛
时间:
2014-3-15 19:20
一楼说的很好,read每使用一次就会的向后读取一个字符
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2