Hello,
I reproduced your test case. It completed when running without the debugger:


But with the debugger it didn't finish in a couple minutes so I killed it. Then 
going through the code, it really takes a long time in the finish() method. 
There are a few loops that could be the reason for the problem (e.g. 
https://github.com/apache/commons-compress/blob/6aacb2953d03b9423057f176e6d4cbe6dca65b3d/src/main/java/org/apache/commons/compress/compressors/lz77support/LZ77Compressor.java#L421)
 and also some LZ77 parameters that could speed up the compression.

I am not really that familiar with the [compress] code base. But if you create 
a JIRA issue, someone else might be able to help investigating this issue. I 
will try to take a look if someday I find time to work on [compress]. Since we 
have another library to compare, it shouldn't be too hard to figure out what's 
wrong, and compare the performance of the two libraries.

Thanks!
-Bruno


    On Saturday, 15 January 2022, 09:50:09 am NZDT, Mark Raynsford 
<org.apache.comm...@io7m.com.invalid> wrote:  
 
 Hello!

I've run into an issue when trying to use the
FramedLZ4CompressorOutputStream class in commons-compress 1.21.

I've put together a small repro case here:

  https://github.com/io7m/commons-compress-20220114

If you run the BadCompress class, it will attempt to open
and compress the given 2097152 byte file. What seems to happen is that
the code goes into an excessively long loop after the finish() method
is called.

The standard lz4 command-line tool doesn't have any problems with the
input:

$ time lz4 bad-compress.bin 
Compressed filename will be : bad-compress.bin.lz4 
Compressed 2097152 bytes into 589156 bytes ==> 28.09%
real    0m0.005s
user    0m0.003s
sys    0m0.003s

I've yet to see the BadCompress example actually finish executing...

Is there something I'm doing wrong? I've tried, for example,
submitting 2097152 bytes as chunks of 4096 bytes, but it makes
no difference.

-- 
Mark Raynsford | https://www.io7m.com

  

Reply via email to