xref: /aosp_15_r20/external/xz-java/src/LZMAEncDemo.java (revision 21943e31f48dee19de75c78c0efeb8417c9a67d0)
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