#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
секунд? Я думаю, это одна из причин дополнительного времени, которое требуется.