Сжатие файлов LZ4 в Java

Каков наилучший способ передать огромный файл CSV в API сжатия LZ4? Следующее не оптимально для очень больших файлов.

byte[] data = file.getBytes();

person zostale    schedule 29.07.2016    source источник
comment
На основе jpountz.github.io/ lz4-java/1.2.0/docs/net/jpountz/lz4/, я не думаю, что вы можете. Вам абсолютно необходимо сжатие LZ4? Я бы рассмотрел сжатие gzip.   -  person VGR    schedule 29.07.2016
comment
gzip намного медленнее для того, что мне нужно - он дает мне скорость сжатия около 50-75 МБ / с. Должен быть способ использовать inputstream с lz4?   -  person zostale    schedule 29.07.2016
comment
Вам нужно было бы посмотреть, сколько байтов составляет один сжимаемый блок LZ4, и обрабатывать это количество одновременно из InputStream… предполагая, что LZ4 вообще имеет такую ​​концепцию.   -  person VGR    schedule 29.07.2016
comment
Изменил мой комментарий на фактический ответ.   -  person flanglet    schedule 01.08.2016
comment
Для тех, кто обнаружит это в будущем: Apache Commons Compress теперь поддерживает потоковую передачу в компрессор LZ4.   -  person Andy Brown    schedule 13.11.2018


Ответы (1)


Вы можете попробовать https://github.com/flanglet/kanzi. Компрессор блоков принимает InputStream и разбивает его на блоки (вы указываете размер в командной строке).

Из Wiki вы можете сделать что-то вроде этого:

java -cp kanzi.jar kanzi.app.BlockCompressor --input=myFile.csv --output=myFile.knz --overwrite --block=8M --transform=lz --entropy=none

person flanglet    schedule 31.07.2016