BufferedReader.readLine()将截断行的开头

3

我遇到了一个读取文件的问题。

BufferedReader in = new BufferedReader(
                      new InputStreamReader(
                         new FileInputStream(file), "UTF-8"));
while ((line = in.readLine()) != null) {
   parseLine(line);
}

Trouble causing line:
 a:38:{s:10:"aaaaaaaaaa";s:6:"215302";s:4:"bbbb";s:9:"新村莊";s:10:"cccccccccc";s:6:"330345";s:6:"dddddd";s:3:"-68";s:6:"eeeeee";s:3:"-12";s:9:"fffffffff";s:4:"3470";s:7:"ggggggg";s:1:"3";s:10:"hhhhhhhhhh";s:1:"2";s:7:"iiiiiii";s:3:"391";s:11:"jjjjjjjjjjj";s:1:"2";s:15:"jjjjjjjjjjjjjjj";s:1:"8";s:15:"jjjjjjjjjjjjjjj";s:1:"8";s:15:"jjjjjjjjjjjjjjj";s:1:"8";s:16:"jjjjjjjjjjjjjjjj";s:2:"12";s:14:"jjjjjjjjjjjjjj";N;s:11:"jjjjjjjjjjj";N;s:13:"jjjjjjjjjjjjj";N;s:20:"jjjjjjjjjjjjjjjjjjjj";s:1:"1"... etc

在第105000行的第30个文件左右,readline()会截断前69个字符。该行总共有936个字符。

你知道为什么readline()会截断这些字符吗?(顺便说一下,还有更长的行!)


4
请提供更多信息。请给我们一个简化的文件来重现问题。猜测您指定的编码可能不正确。 - Mark Peters
4
我怀疑你有诊断问题...例如,该行包含一些无法打印的字符,这些字符会混淆你的显示代码。readLine() 函数本身并不会切断行的开头。 - Jon Skeet
大家好,这是引起问题的那一行代码: - Marcus
2
这真的很麻烦,因为我看不到它 :) - KARASZI István
马库斯,你能再试一次吗,但不要使用 BufferedReader 吗?直接从 InputStreamReader 中读取而不是将其包装到 BufferedReader 中。只是为了调试目的... - GeorgeG
显示剩余5条评论
1个回答

0

我尝试了你的代码,但在调用parseLine(line)方法时,我使用了一个简单的System.out.println(line),一切都正常:你的样例中引起问题的那一行在我的控制台上显示正确。

请您自己尝试一下,并让我们看看您的parseLine(line)方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接