BufferedReader.readLine() обрезает начало строки

У меня проблема с чтением файла.

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

Примерно в 30-м файле в строке около 105000 функция readline() отсекает первые 69 символов. Всего в строке 936 символов.

Есть идеи, почему readline() обрезает символы? (Кстати, есть очереди длиннее!)


person Marcus    schedule 05.08.2011    source источник
comment
Нам нужно больше информации. Дайте нам урезанный файл, который воспроизводит проблему. Как догадка, указанная вами кодировка может быть неправильной.   -  person Mark Peters    schedule 05.08.2011
comment
Я подозреваю, что у вас проблемы с диагностикой... например. строка содержит некоторые непечатаемые символы, которые сбивают с толку ваш код отображения. readLine() сам по себе не обрезает начало строки.   -  person Jon Skeet    schedule 05.08.2011
comment
Привет всем, это строка, которая вызывает проблемы:   -  person Marcus    schedule 05.08.2011
comment
Это действительно вызывает проблемы, потому что я его не вижу :)   -  person KARASZI István    schedule 05.08.2011
comment
@Marcus Вставьте тревожную строку в свой вопрос, желательно в стиле кода ... чтобы мы могли увидеть, есть ли проблема со специальным символом.   -  person Nishant    schedule 05.08.2011
comment
Я использую этот парсер. Но для подачи парсеру каждой строки мне нужно что-то, чтобы прочитать файл построчно.   -  person Marcus    schedule 05.08.2011
comment
Я вижу некоторые китайские/японские (извините, если другие) иероглифы: 新. попробуйте удалить их и попробуйте прочитать снова, чтобы увидеть, не в этом ли проблема. (Я знаю, что это UTF-8, но стоит попробовать :))   -  person Justin    schedule 05.08.2011
comment
Одно и то же выражение встречается несколько раз и не вызывает никаких проблем.   -  person Marcus    schedule 05.08.2011
comment
На самом деле, меня не волнуют символы в этих полях. Есть ли способ пропустить их, потому что он не читается должным образом...   -  person Marcus    schedule 05.08.2011
comment
Маркус, можешь попробовать еще раз, но не использовать BufferedReader? Просто читайте непосредственно из InputStreamReader, а не оборачивайте его в BufferedReader. Просто для отладки целей...   -  person GeorgeG    schedule 05.08.2011


Ответы (1)


Я попробовал ваш код, но с простой System.out.println(line), где вы вызываете метод parseLine(line), и все работает нормально: ваш образец строки, вызывающей проблемы, отображается правильно в моей консоли.

Пожалуйста, попробуйте сами и дайте нам увидеть ваш метод parseLine(line).

person Manuel    schedule 09.08.2011