| /* | |
| * XZSeekEncDemo | |
| * | |
| * 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. | |
| */ | |
| import java.io.*; | |
| import org.tukaani.xz.*; | |
| /** | |
| * Compresses a single file from standard input to standard ouput into | |
| * a random-accessible .xz file. | |
| * <p> | |
| * Arguments: [preset [block size]] | |
| * <p> | |
| * Preset is an LZMA2 preset level which is an integer in the range [0, 9]. | |
| * The default is 6. | |
| * <p> | |
| * Block size specifies the amount of uncompressed data to store per | |
| * XZ Block. The default is 1 MiB (1048576 bytes). Bigger means better | |
| * compression ratio. Smaller means faster random access. | |
| */ | |
| class XZSeekEncDemo { | |
| public static void main(String[] args) throws Exception { | |
| LZMA2Options options = new LZMA2Options(); | |
| if (args.length >= 1) | |
| options.setPreset(Integer.parseInt(args[0])); | |
| int blockSize = 1024 * 1024; | |
| if (args.length >= 2) | |
| blockSize = Integer.parseInt(args[1]); | |
| options.setDictSize(Math.min(options.getDictSize(), | |
| Math.max(LZMA2Options.DICT_SIZE_MIN, | |
| blockSize))); | |
| System.err.println("Encoder memory usage: " | |
| + options.getEncoderMemoryUsage() + " KiB"); | |
| System.err.println("Decoder memory usage: " | |
| + options.getDecoderMemoryUsage() + " KiB"); | |
| System.err.println("Block size: " + blockSize + " B"); | |
| XZOutputStream out = new XZOutputStream(System.out, options); | |
| byte[] buf = new byte[8192]; | |
| int left = blockSize; | |
| while (true) { | |
| int size = System.in.read(buf, 0, Math.min(buf.length, left)); | |
| if (size == -1) | |
| break; | |
| out.write(buf, 0, size); | |
| left -= size; | |
| if (left == 0) { | |
| out.endBlock(); | |
| left = blockSize; | |
| } | |
| } | |
| out.finish(); | |
| } | |
| } |