sean3112
2011-06-21 15:54
浏览 246
已采纳

求哪位童鞋解释下BufferedReader的readLine方法在打了断点后读取的数据不对的原因,谢谢!

[code="java"]package com.oraro.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class a {
public static void main(String[] args) throws IOException {
File f = new File("d:/1.txt");
if (f != null) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(f);
br = new BufferedReader(fr);
String line = br.readLine();
while (line != null) {// 断点打在这里,然后一步一步执行,和不打断点直接执行的区别;
System.out.println(line);
line = br.readLine();
}
} catch (Exception e) {
br.close();
fr.close();
}
br.close();
fr.close();
}
}
}
[/code]
注意JDK是1.4,当不打断点的时候就不会有问题,附件有1.txt文件,文件中可以加一空行,再测试。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • xiaoyingSUN 2011-06-24 15:59
    已采纳

    又多说2句 ,为什么不打断点就正常
    因为不断点的话
    他就忽略了各种进制,直到换行符才算readLine()
    这是jvm的机制决定的,你断点其实就是为了更仔细的看运行过程
    所以他就真的一点一点给你运行鸟 :?

    打赏 评论
  • 也许世界还没停 2011-06-21 16:07

    能描述一下那里不对吗?

    打赏 评论
  • liufeiBest 2011-06-21 16:39

    真不明白哪里不对了。。是对的。

    打赏 评论
  • xiaoyingSUN 2011-06-21 22:33

    打不打断点绝对不会影响结果
    呼唤LZ把结果截图发出来

    打赏 评论
  • 也许世界还没停 2011-06-24 15:04

    复制的代码,附件也下载了
    经测试没有这种显现

    打赏 评论
  • xiaoyingSUN 2011-06-24 15:51

    [quote]看下打了断点的结果截图 [/quote]

    我看了你文本的Haxe,问题是你的文本输入格式是8进制双位
    不会贴截图 ,我帮你打出来

    你的第一行 aa|1|1|dd|sd

    实际上背后是

    00000000h 61 61 ; aa // 61代表a
    00000002h 7C 31 ; |1 // 7C 代表| ,31代表1 依此类推下面行
    00000004h 7C 31 ; |1
    00000006h 64 7C ; d|
    00000008h 73 64 ; sd
    0000000ah 0D 0A ; .. // 0D 0A通用换行


    好了,问题出现你写的程序了,其实上次我就想说来着

    第一行没有问题,是因为你一开始写
    line = reader.readLine()
    在循环while外面
    其实这个时候jvm里只取出来了aa 但是不会打印出来,等遇到真正的换行他才打印
    所以第一行正常取出来了 输出没有问题

    第2行就麻烦了
    你在循环里先 readLine()了一次 把aa取出来
    但是当你while 的时候 line !=null
    因为你定义line = reader.readLine()是循环的大前提
    这个时候这句话的判断实际上是
    line 先等于 readLine() 然后才判断结果是不是null

    所以,判断的就是接下来的 |1 而不是本来的 aa
    其他人没有出问题,是文本编辑器默认格式不一样


    既然说了这么多,别嫌弃姐姐啰嗦啊
    本来你5行代码解决的问题,结果你硬写了快20行
    java看似很简单,谁都可以写
    但真的不容易啊。。。
    [quote]

    public static void main (String[] arg) throws Exception{

    File f = new File("c:/1.txt");

    BufferedReader br =new BufferedReader(new FileReader(f));

    String line=null;
    while ((line=br.readLine())!= null) {
    System.out.println(line);}

    br.close();

    }[/quote]

    打赏 评论

相关推荐 更多相似问题