Я использую объект Java BufferedReader для чтения построчно GZIPInputStream, который указывает на действительный архив GZIP, содержащий 1000 строк текста ASCII, в типичном формате CSV. Код выглядит так:
BufferedReader buffer = new BufferedReader(new InputStreamReader(
new GZIPInputStream(new FileInputStream(file))));
где файл - это фактический объект File, указывающий на архив.
Я прочитал весь файл, позвонив
int count = 0;
String line = null;
while ((line = reader.readLine()) != null)
{
count++;
}
и считыватель просматривает файл, как и ожидалось, но в конце он обходит строку # 1000 и читает еще одну строку (т. Е. Count = 1001 после завершения цикла).
Вызов line.length () в последней строке сообщает о большом количестве (4000+) символов, которые невозможно распечатать ( Character.getNumericValue () возвращает -1).
На самом деле, если я сделаю line.getBytes () , результирующий массив byte [] будет иметь равное количество символов NULL ('\ 0').
Похоже ли это на ошибку в BufferedReader?
В любом случае, кто-нибудь может предложить обходной путь, чтобы обойти это поведение?
РЕДАКТИРОВАТЬ: Более странное поведение : Для чтения первой строки указывается имя файла, несколько символов NULL ('\ 0') и имя строки и имя группы, затем следует фактический текст!
РЕДАКТИРОВАТЬ: я создал очень простой тестовый класс, который воспроизводит эффект, который я описал выше, по крайней мере, на моей платформе.
РЕДАКТИРОВАТЬ: По-видимому, ложная тревога, файл, который я получал, был не простым GZIP, а tared GZIP, так что это объясняет это, нет необходимости в дальнейшем тестировании. Спасибо всем!