xref: /aosp_15_r20/external/xz-java/src/XZDecDemo.java (revision 21943e31f48dee19de75c78c0efeb8417c9a67d0)
1*21943e31SAndroid Build Coastguard Worker /*
2*21943e31SAndroid Build Coastguard Worker  * XZDecDemo
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 .xz 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 class XZDecDemo {
main(String[] args)18*21943e31SAndroid Build Coastguard Worker     public static void main(String[] args) {
19*21943e31SAndroid Build Coastguard Worker         byte[] buf = new byte[8192];
20*21943e31SAndroid Build Coastguard Worker         String name = null;
21*21943e31SAndroid Build Coastguard Worker 
22*21943e31SAndroid Build Coastguard Worker         try {
23*21943e31SAndroid Build Coastguard Worker             if (args.length == 0) {
24*21943e31SAndroid Build Coastguard Worker                 name = "standard input";
25*21943e31SAndroid Build Coastguard Worker                 InputStream in = new XZInputStream(System.in);
26*21943e31SAndroid Build Coastguard Worker 
27*21943e31SAndroid Build Coastguard Worker                 int size;
28*21943e31SAndroid Build Coastguard Worker                 while ((size = in.read(buf)) != -1)
29*21943e31SAndroid Build Coastguard Worker                     System.out.write(buf, 0, size);
30*21943e31SAndroid Build Coastguard Worker 
31*21943e31SAndroid Build Coastguard Worker             } else {
32*21943e31SAndroid Build Coastguard Worker                 // Read from files given on the command line.
33*21943e31SAndroid Build Coastguard Worker                 for (int i = 0; i < args.length; ++i) {
34*21943e31SAndroid Build Coastguard Worker                     name = args[i];
35*21943e31SAndroid Build Coastguard Worker                     InputStream in = new FileInputStream(name);
36*21943e31SAndroid Build Coastguard Worker 
37*21943e31SAndroid Build Coastguard Worker                     try {
38*21943e31SAndroid Build Coastguard Worker                         // Since XZInputStream does some buffering internally
39*21943e31SAndroid Build Coastguard Worker                         // anyway, BufferedInputStream doesn't seem to be
40*21943e31SAndroid Build Coastguard Worker                         // needed here to improve performance.
41*21943e31SAndroid Build Coastguard Worker                         // in = new BufferedInputStream(in);
42*21943e31SAndroid Build Coastguard Worker                         in = new XZInputStream(in);
43*21943e31SAndroid Build Coastguard Worker 
44*21943e31SAndroid Build Coastguard Worker                         int size;
45*21943e31SAndroid Build Coastguard Worker                         while ((size = in.read(buf)) != -1)
46*21943e31SAndroid Build Coastguard Worker                             System.out.write(buf, 0, size);
47*21943e31SAndroid Build Coastguard Worker 
48*21943e31SAndroid Build Coastguard Worker                     } finally {
49*21943e31SAndroid Build Coastguard Worker                         // Close FileInputStream (directly or indirectly
50*21943e31SAndroid Build Coastguard Worker                         // via XZInputStream, it doesn't matter).
51*21943e31SAndroid Build Coastguard Worker                         in.close();
52*21943e31SAndroid Build Coastguard Worker                     }
53*21943e31SAndroid Build Coastguard Worker                 }
54*21943e31SAndroid Build Coastguard Worker             }
55*21943e31SAndroid Build Coastguard Worker         } catch (FileNotFoundException e) {
56*21943e31SAndroid Build Coastguard Worker             System.err.println("XZDecDemo: Cannot open " + name + ": "
57*21943e31SAndroid Build Coastguard Worker                                + e.getMessage());
58*21943e31SAndroid Build Coastguard Worker             System.exit(1);
59*21943e31SAndroid Build Coastguard Worker 
60*21943e31SAndroid Build Coastguard Worker         } catch (EOFException e) {
61*21943e31SAndroid Build Coastguard Worker             System.err.println("XZDecDemo: Unexpected end of input on "
62*21943e31SAndroid Build Coastguard Worker                                + name);
63*21943e31SAndroid Build Coastguard Worker             System.exit(1);
64*21943e31SAndroid Build Coastguard Worker 
65*21943e31SAndroid Build Coastguard Worker         } catch (IOException e) {
66*21943e31SAndroid Build Coastguard Worker             System.err.println("XZDecDemo: Error decompressing from "
67*21943e31SAndroid Build Coastguard Worker                                + name + ": " + e.getMessage());
68*21943e31SAndroid Build Coastguard Worker             System.exit(1);
69*21943e31SAndroid Build Coastguard Worker         }
70*21943e31SAndroid Build Coastguard Worker     }
71*21943e31SAndroid Build Coastguard Worker }
72