1*21943e31SAndroid Build Coastguard Worker /* 2*21943e31SAndroid Build Coastguard Worker * LZMAEncDemo 3*21943e31SAndroid Build Coastguard Worker * 4*21943e31SAndroid Build Coastguard Worker * Author: Lasse Collin <[email protected]> 5*21943e31SAndroid Build Coastguard Worker * 6*21943e31SAndroid Build Coastguard Worker * This file has been put into the public domain. 7*21943e31SAndroid Build Coastguard Worker * You can do whatever you want with this file. 8*21943e31SAndroid Build Coastguard Worker */ 9*21943e31SAndroid Build Coastguard Worker 10*21943e31SAndroid Build Coastguard Worker import java.io.*; 11*21943e31SAndroid Build Coastguard Worker import org.tukaani.xz.*; 12*21943e31SAndroid Build Coastguard Worker 13*21943e31SAndroid Build Coastguard Worker /** 14*21943e31SAndroid Build Coastguard Worker * Compresses a single file from standard input to standard ouput into 15*21943e31SAndroid Build Coastguard Worker * the .lzma file format. 16*21943e31SAndroid Build Coastguard Worker * <p> 17*21943e31SAndroid Build Coastguard Worker * NOTE: For most purposes, .lzma is a legacy format and usually you should 18*21943e31SAndroid Build Coastguard Worker * use .xz instead. 19*21943e31SAndroid Build Coastguard Worker * <p> 20*21943e31SAndroid Build Coastguard Worker * Two optional arguments are supported: 21*21943e31SAndroid Build Coastguard Worker * <ol> 22*21943e31SAndroid Build Coastguard Worker * <li>LZMA preset level which is an integer in the range [0, 9]. 23*21943e31SAndroid Build Coastguard Worker * The default is 6.</li> 24*21943e31SAndroid Build Coastguard Worker * <li>Uncompressed size of the input as bytes.<li> 25*21943e31SAndroid Build Coastguard Worker * </ol> 26*21943e31SAndroid Build Coastguard Worker */ 27*21943e31SAndroid Build Coastguard Worker class LZMAEncDemo { main(String[] args)28*21943e31SAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 29*21943e31SAndroid Build Coastguard Worker LZMA2Options options = new LZMA2Options(); 30*21943e31SAndroid Build Coastguard Worker long inputSize = -1; 31*21943e31SAndroid Build Coastguard Worker 32*21943e31SAndroid Build Coastguard Worker if (args.length >= 1) 33*21943e31SAndroid Build Coastguard Worker options.setPreset(Integer.parseInt(args[0])); 34*21943e31SAndroid Build Coastguard Worker 35*21943e31SAndroid Build Coastguard Worker if (args.length >= 2) 36*21943e31SAndroid Build Coastguard Worker inputSize = Long.parseLong(args[1]); 37*21943e31SAndroid Build Coastguard Worker 38*21943e31SAndroid Build Coastguard Worker System.err.println("Encoder memory usage: " 39*21943e31SAndroid Build Coastguard Worker + options.getEncoderMemoryUsage() + " KiB"); 40*21943e31SAndroid Build Coastguard Worker System.err.println("Decoder memory usage: " 41*21943e31SAndroid Build Coastguard Worker + options.getDecoderMemoryUsage() + " KiB"); 42*21943e31SAndroid Build Coastguard Worker 43*21943e31SAndroid Build Coastguard Worker // LZMAOutputStream writes one byte at a time. It helps a little, 44*21943e31SAndroid Build Coastguard Worker // especially in the fastest presets, to use BufferedOutputStream. 45*21943e31SAndroid Build Coastguard Worker OutputStream out = new BufferedOutputStream(System.out); 46*21943e31SAndroid Build Coastguard Worker LZMAOutputStream encoder = new LZMAOutputStream(out, options, 47*21943e31SAndroid Build Coastguard Worker inputSize); 48*21943e31SAndroid Build Coastguard Worker 49*21943e31SAndroid Build Coastguard Worker byte[] buf = new byte[8192]; 50*21943e31SAndroid Build Coastguard Worker int size; 51*21943e31SAndroid Build Coastguard Worker while ((size = System.in.read(buf)) != -1) 52*21943e31SAndroid Build Coastguard Worker encoder.write(buf, 0, size); 53*21943e31SAndroid Build Coastguard Worker 54*21943e31SAndroid Build Coastguard Worker encoder.finish(); 55*21943e31SAndroid Build Coastguard Worker out.flush(); 56*21943e31SAndroid Build Coastguard Worker } 57*21943e31SAndroid Build Coastguard Worker } 58