黑马程序员技术交流社区

标题: 关于IO的public int read(char[] cbuf) 方法 [打印本页]

作者: 张洪慊    时间: 2013-4-30 22:32
标题: 关于IO的public int read(char[] cbuf) 方法
本帖最后由 张洪慊 于 2013-5-1 15:42 编辑

看下代码:
  1. package filereader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import static java.lang.System.out;
  5. class FileReaderDemo2{
  6. public static void main(String[] args)throws IOException{
  7. FileReader fr = new FileReader("test.txt");//文件内容a
  8. char[] buf = new char[3];//定义数组长度为3

  9. int num=fr.read(buf);
  10. out.println("num="+num+"..."+new String(buf));

  11. num=fr.read(buf);
  12. out.println("num="+num+"..."+new String(buf));

  13. num=fr.read(buf);
  14. out.println("num="+num+"..."+new String(buf));
  15. System.out.println("over");
  16. }
  17. }
复制代码
但输出结果却是: (我把源文件和test.txt均放在了c:\)

竟然输出了3a??我很郁闷,我在反复检查c:\test.txt内容(我把源文件和test.txt均放在c:\下测试)->确定为一个a
我在考虑是不是因为我的操作系统缘故(windows 7 64bit 旗舰版)
于是我把java源文件和test.txt拷到XP系统/windows 7 32bit下测试:

一个a,正常结果.
我在用U盘把JDK和源文件拷到同学机器上(和我一样操作系统)运行,3a…..郁闷..
这是为什么?



作者: 朱安柱    时间: 2013-4-30 23:13
这个结果应该是对的。read方法读取字符数,如果已到达流的末尾,则返回 -1 ,三次是输出的结果,只有一次num=1,而其他两次都为-1,说明已经达到流的末尾。如果再定义同样的操作的话,还是会输出结果num=-1...a。同时用数组遍历的方法,遍历数组,输出的结果确实是只有一个a元素。
作者: 张洪慊    时间: 2013-4-30 23:20
朱安柱 发表于 2013-4-30 23:13
这个结果应该是对的。read方法读取字符数,如果已到达流的末尾,则返回 -1 ,三次是输出的结果,只有一次nu ...

额,关键我第一次就输出了aaa....何解?
作者: 张洪慊    时间: 2013-5-1 15:42
参照http://bbs.itheima.com/thread-48287-1-1.html帖子




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2