Я профилировал свой код, который загружал двоичный файл. Время загрузки составляло около 15 секунд.
Большая часть моего времени загрузки приходилась на методы, которые загружали двоичные данные.
У меня был следующий код для создания моего DataInputStream:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
И я изменил это на:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
Итак, после того, как я сделал это небольшое изменение, код загрузки изменился с 15 секунд до 4.
Но потом я обнаружил, что BufferedInputStream имеет два конструктора. Другой конструктор позволяет вам явно определить размер буфера.
У меня два вопроса:
- Какой размер выбран в BufferedInputStream и является ли он идеальным? Если нет, как я могу найти оптимальный размер для буфера? Должен ли я написать небольшой кусочек кода, который выполняет бинарный поиск?
- Это лучший способ использовать BufferedInputStream? Первоначально я имел это в GZIPInputStream, но была незначительная выгода. Я предполагаю, что код делает сейчас каждый раз, когда необходимо заполнить файловый буфер, входной поток GZIP проходит и декодирует x байтов (где x - размер буфера) Стоит ли просто опустить GZIPInputStream полностью? Это определенно не нужно, но размер моего файла резко уменьшается при его использовании.