1 /* 2 * LZMADecDemo 3 * 4 * Author: Lasse Collin <lasse.collin@tukaani.org> 5 * 6 * This file has been put into the public domain. 7 * You can do whatever you want with this file. 8 */ 9 10 import java.io.*; 11 import org.tukaani.xz.*; 12 13 /** 14 * Decompresses .lzma files to standard output. If no arguments are given, 15 * reads from standard input. 16 * 17 * NOTE: For most purposes, .lzma is a legacy format and usually you should 18 * use .xz instead. 19 */ 20 class LZMADecDemo { main(String[] args)21 public static void main(String[] args) { 22 byte[] buf = new byte[8192]; 23 String name = null; 24 25 try { 26 if (args.length == 0) { 27 name = "standard input"; 28 29 // No need to use BufferedInputStream with System.in which 30 // seems to be fast with one-byte reads. 31 InputStream in = new LZMAInputStream(System.in); 32 33 int size; 34 while ((size = in.read(buf)) != -1) 35 System.out.write(buf, 0, size); 36 37 } else { 38 // Read from files given on the command line. 39 for (int i = 0; i < args.length; ++i) { 40 name = args[i]; 41 InputStream in = new FileInputStream(name); 42 43 try { 44 // In contrast to other classes in org.tukaani.xz, 45 // LZMAInputStream doesn't do buffering internally 46 // and reads one byte at a time. BufferedInputStream 47 // gives a huge performance improvement here but even 48 // then it's slower than the other input streams from 49 // org.tukaani.xz. 50 in = new BufferedInputStream(in); 51 in = new LZMAInputStream(in); 52 53 int size; 54 while ((size = in.read(buf)) != -1) 55 System.out.write(buf, 0, size); 56 57 } finally { 58 // Close FileInputStream (directly or indirectly 59 // via LZMAInputStream, it doesn't matter). 60 in.close(); 61 } 62 } 63 } 64 } catch (FileNotFoundException e) { 65 System.err.println("LZMADecDemo: Cannot open " + name + ": " 66 + e.getMessage()); 67 System.exit(1); 68 69 } catch (EOFException e) { 70 System.err.println("LZMADecDemo: Unexpected end of input on " 71 + name); 72 System.exit(1); 73 74 } catch (IOException e) { 75 System.err.println("LZMADecDemo: Error decompressing from " 76 + name + ": " + e.getMessage()); 77 System.exit(1); 78 } 79 } 80 } 81