xref: /aosp_15_r20/external/xz-java/src/LZMADecDemo.java (revision 21943e31f48dee19de75c78c0efeb8417c9a67d0)
1*21943e31SAndroid Build Coastguard Worker /*
2*21943e31SAndroid Build Coastguard Worker  * LZMADecDemo
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  * Decompresses .lzma files to standard output. If no arguments are given,
15*21943e31SAndroid Build Coastguard Worker  * reads from standard input.
16*21943e31SAndroid Build Coastguard Worker  *
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  */
20*21943e31SAndroid Build Coastguard Worker class LZMADecDemo {
main(String[] args)21*21943e31SAndroid Build Coastguard Worker     public static void main(String[] args) {
22*21943e31SAndroid Build Coastguard Worker         byte[] buf = new byte[8192];
23*21943e31SAndroid Build Coastguard Worker         String name = null;
24*21943e31SAndroid Build Coastguard Worker 
25*21943e31SAndroid Build Coastguard Worker         try {
26*21943e31SAndroid Build Coastguard Worker             if (args.length == 0) {
27*21943e31SAndroid Build Coastguard Worker                 name = "standard input";
28*21943e31SAndroid Build Coastguard Worker 
29*21943e31SAndroid Build Coastguard Worker                 // No need to use BufferedInputStream with System.in which
30*21943e31SAndroid Build Coastguard Worker                 // seems to be fast with one-byte reads.
31*21943e31SAndroid Build Coastguard Worker                 InputStream in = new LZMAInputStream(System.in);
32*21943e31SAndroid Build Coastguard Worker 
33*21943e31SAndroid Build Coastguard Worker                 int size;
34*21943e31SAndroid Build Coastguard Worker                 while ((size = in.read(buf)) != -1)
35*21943e31SAndroid Build Coastguard Worker                     System.out.write(buf, 0, size);
36*21943e31SAndroid Build Coastguard Worker 
37*21943e31SAndroid Build Coastguard Worker             } else {
38*21943e31SAndroid Build Coastguard Worker                 // Read from files given on the command line.
39*21943e31SAndroid Build Coastguard Worker                 for (int i = 0; i < args.length; ++i) {
40*21943e31SAndroid Build Coastguard Worker                     name = args[i];
41*21943e31SAndroid Build Coastguard Worker                     InputStream in = new FileInputStream(name);
42*21943e31SAndroid Build Coastguard Worker 
43*21943e31SAndroid Build Coastguard Worker                     try {
44*21943e31SAndroid Build Coastguard Worker                         // In contrast to other classes in org.tukaani.xz,
45*21943e31SAndroid Build Coastguard Worker                         // LZMAInputStream doesn't do buffering internally
46*21943e31SAndroid Build Coastguard Worker                         // and reads one byte at a time. BufferedInputStream
47*21943e31SAndroid Build Coastguard Worker                         // gives a huge performance improvement here but even
48*21943e31SAndroid Build Coastguard Worker                         // then it's slower than the other input streams from
49*21943e31SAndroid Build Coastguard Worker                         // org.tukaani.xz.
50*21943e31SAndroid Build Coastguard Worker                         in = new BufferedInputStream(in);
51*21943e31SAndroid Build Coastguard Worker                         in = new LZMAInputStream(in);
52*21943e31SAndroid Build Coastguard Worker 
53*21943e31SAndroid Build Coastguard Worker                         int size;
54*21943e31SAndroid Build Coastguard Worker                         while ((size = in.read(buf)) != -1)
55*21943e31SAndroid Build Coastguard Worker                             System.out.write(buf, 0, size);
56*21943e31SAndroid Build Coastguard Worker 
57*21943e31SAndroid Build Coastguard Worker                     } finally {
58*21943e31SAndroid Build Coastguard Worker                         // Close FileInputStream (directly or indirectly
59*21943e31SAndroid Build Coastguard Worker                         // via LZMAInputStream, it doesn't matter).
60*21943e31SAndroid Build Coastguard Worker                         in.close();
61*21943e31SAndroid Build Coastguard Worker                     }
62*21943e31SAndroid Build Coastguard Worker                 }
63*21943e31SAndroid Build Coastguard Worker             }
64*21943e31SAndroid Build Coastguard Worker         } catch (FileNotFoundException e) {
65*21943e31SAndroid Build Coastguard Worker             System.err.println("LZMADecDemo: Cannot open " + name + ": "
66*21943e31SAndroid Build Coastguard Worker                                + e.getMessage());
67*21943e31SAndroid Build Coastguard Worker             System.exit(1);
68*21943e31SAndroid Build Coastguard Worker 
69*21943e31SAndroid Build Coastguard Worker         } catch (EOFException e) {
70*21943e31SAndroid Build Coastguard Worker             System.err.println("LZMADecDemo: Unexpected end of input on "
71*21943e31SAndroid Build Coastguard Worker                                + name);
72*21943e31SAndroid Build Coastguard Worker             System.exit(1);
73*21943e31SAndroid Build Coastguard Worker 
74*21943e31SAndroid Build Coastguard Worker         } catch (IOException e) {
75*21943e31SAndroid Build Coastguard Worker             System.err.println("LZMADecDemo: Error decompressing from "
76*21943e31SAndroid Build Coastguard Worker                                + name + ": " + e.getMessage());
77*21943e31SAndroid Build Coastguard Worker             System.exit(1);
78*21943e31SAndroid Build Coastguard Worker         }
79*21943e31SAndroid Build Coastguard Worker     }
80*21943e31SAndroid Build Coastguard Worker }
81