/* * LZMA2Encoder * * Author: Lasse Collin <lasse.collin@tukaani.org> * * This file has been put into the public domain. * You can do whatever you want with this file. */ package org.tukaani.xz; import org.tukaani.xz.lzma.LZMAEncoder; class LZMA2Encoder extends LZMA2Coder implements FilterEncoder { private final LZMA2Options options; private final byte[] props = new byte[1]; LZMA2Encoder(LZMA2Options options) { if (options.getPresetDict() != null) throw new IllegalArgumentException( "XZ doesn't support a preset dictionary for now"); if (options.getMode() == LZMA2Options.MODE_UNCOMPRESSED) { props[0] = (byte)0; } else { int d = Math.max(options.getDictSize(), LZMA2Options.DICT_SIZE_MIN); props[0] = (byte)(LZMAEncoder.getDistSlot(d - 1) - 23); } // Make a private copy so that the caller is free to change its copy. this.options = (LZMA2Options)options.clone(); } public long getFilterID() { return FILTER_ID; } public byte[] getFilterProps() { return props; } public boolean supportsFlushing() { return true; } public FinishableOutputStream getOutputStream(FinishableOutputStream out) { return options.getOutputStream(out); } }