Чтение файла .csv быстрее, чем чтение того же файла, сжатого как .gz

#java #gzip #inputstream #reader

#java #gzip #входной поток #считыватель

Вопрос:

Кажется немного ироничным, но когда я читал файл .csv объемом 2 ГБ построчно с помощью BufferedReader, это заняло около 4,5 секунд. Я сжал файл с помощью gzip, который составил около 230 МБ. Для чтения файла .gz я использовал GZIPInputStream, обернутый в BufferedReader. Это заняло около 8,5 секунд.

Я знаю, что интерфейс InputStream считывает байты данных в отличие от считывателей, но я предположил, что если файл размером 200 МБ окажется быстрее загруженным в память. Возможно ли достичь лучшей производительности с использованием .gz? Спасибо.

Ответ №1:

GZIPInputStream разархивирует файл по мере его чтения. При распаковке возникают некоторые накладные расходы, которые могли бы объяснить дополнительные затраты времени.

Комментарии:

1. Да, это тоже мое подозрение. Мой вопрос заключается в том, можем ли мы каким-то образом улучшить производительность при чтении сжатого файла. Я пытался изменить размер буфера, но это не помогло. Я предположил, что сжатие — это задача с интенсивным вводом-выводом, следовательно, это не повлияет на время выполнения задачи процессора. Пожалуйста, поправьте меня, если я предполагаю неправильно.

2. Сжатие сильнее нагружает процессор. По сути, вы обмениваете место на диске на повышенную загрузку процессора

Ответ №2:

Сколько времени требуется вашему компьютеру для распаковки файла? Могу я предположить, около 8.5 - 4.5 = 4 секунд? Я думаю, это одна из причин дополнительного времени, которое требуется.