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:
GZIPOutputStream gzipout = new GZIPOutputStream(bos);
use
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:
before after gain 11350 11327 23 57172 57102 70 83377 83284 93 78015 77803 212 51987 51732 255
[all sizes provided in B]
Thanks! Nice approach.
Do you need any other special way to read this other than the normal GZIP way?
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.