Краткий ответ: я бы выбрал что-то вроде 16k.
Длинный ответ:
ZIP использует алгоритм сжатия DEFLATE (http://en.wikipedia.org/wiki/DEFLATE). Deflate - разновидность Ziv Lempel Welch (поиск по Википедии для LZW). DEFLATE использует LZ77 и кодирование Хаффмана.
Это словарное сжатие, и, насколько мне известно, с точки зрения алгоритма размер буфера, используемый при подаче данных в дефлятор, почти не должен влиять. Наибольшее влияние на LZ77 оказывают размер словаря и скользящее окно, которые не контролируются размером буфера в вашем примере.
Я думаю, что вы можете поэкспериментировать с буфером другого размера, если хотите, и построить график, но я уверен, что вы не увидите каких-либо существенных изменений в степени сжатия (3/80000 = 0,00375%).
Наибольшее влияние размер буфера оказывает на скорость из-за объема служебного кода, который выполняется при вызовах FileInputStream.read и zos.write. С этой точки зрения вы должны учитывать, что вы получаете и что вы тратите.
При увеличении с 1 байта до 1024 байтов вы теряете 1023 байта (теоретически) и получаете ~ 1024 сокращения затрат времени в методах .read и .write.
Однако при увеличении с 1К до 64К вы тратите 63К, что снижает накладные расходы в 64 раза.
Так что это идет с уменьшением отдачи, поэтому я бы выбрал где-то посередине (скажем, 16k) и придерживался этого.