| /* |
| * XZSeekEncDemo |
| * |
| * Author: Lasse Collin <[email protected]> |
| * |
| * 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(); |
| } |
| } |