setting compression level for GZIPOutputStream in java

i’m compressing quite a lot of data on the fly to save storage… until now i’ve been quite sure one cannot control compression level with oracle java’s GZIPOutputStream but apparently i was wrong.

in this article – i’ve found an easy solution.

instead of:

1
GZIPOutputStream gzipout = new GZIPOutputStream(bos);

use

1
OutputStream gzipout = new GZIPOutputStream(bos){{def.setLevel(Deflater.BEST_COMPRESSION);}};

to construct your compressor.

but setting compression level to 9 [instead of default 5] made outputs barely ~0.5% smaller for me:

1
2
3
4
5
6
before  after   gain
11350   11327   23
57172   57102   70
83377   83284   93
78015   77803   212
51987   51732   255

[all sizes provided in B]

3 thoughts on “setting compression level for GZIPOutputStream in java

  1. Do you need any other special way to read this other than the normal GZIP way?

    1. you can read it using ‘normal gzip way’ – no special parameters needed, i unpack data packed in this way using regular GZIPInputStream. it can also be decompressed using command line gunzip or gzip implementations from other languages/libraries.

Leave a Reply

Your email address will not be published. Required fields are marked *

(Spamcheck Enabled)