On 2017-10-05, Simo Chiegang, Boris Arthur wrote:

> I tried simple to compress a byte array using the LZ4 compression:

> int numberReaded = tifFile.readEncodedStrip( 49, pointer, -1 );
> byte[] byteResult = pointer.getByteArray( 0, numberReaded);   // The array 
> has a length of 4194048 so 4Mb
> ByteArrayOutputStream outStr = new ByteArrayOutputStream();
> BlockLZ4CompressorOutputStream outputStream = new 
> BlockLZ4CompressorOutputStream( outStr );
> outputStream.write( byteResult );

> So , the execution time of the write method is more than 1
> minutes. It's not acceptable, may be it is a bug or I made somethings
> wrong?

By default the LZ4 implementation tries very hard to create the optimal
compression result. You can tweak it by using the two-arg constructor
and tweaking the parameters. Something like

BlockLZ4CompressorOutputStream.createParameterBuilder().tunedForSpeed().build()

> P.S: I tried another library and  I get the time under 10ms!

Unfortunately I doubt you'll get there with tunedForSpeed for biggish
arrays. You could try tweaking parameters further. You will probably
gain most by reducing maxOffset and maxBackReferenceLength.

While developing the LZ4 code I created a few benchmarks

https://github.com/bodewig/commons-compress-benchmarks/wiki/Comparison-of-Compression-Formats

as you can see LZ4 is quite a but slower than Snappy and the main
difference (they use the same compression code) is that Snappy is
restricts the back reference length to 64 bytes while it is almost
unlimited for LZ4. So when Snappy finds a match of 64 bytes it is done
while LZ4 keeps searching for longer matches.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org

Reply via email to