| /* | |
| * LZMADecDemo | |
| * | |
| * Author: Lasse Collin <lasse.collin@tukaani.org> | |
| * | |
| * This file has been put into the public domain. | |
| * You can do whatever you want with this file. | |
| */ | |
| import java.io.*; | |
| import org.tukaani.xz.*; | |
| /** | |
| * Decompresses .lzma files to standard output. If no arguments are given, | |
| * reads from standard input. | |
| * | |
| * NOTE: For most purposes, .lzma is a legacy format and usually you should | |
| * use .xz instead. | |
| */ | |
| class LZMADecDemo { | |
| public static void main(String[] args) { | |
| byte[] buf = new byte[8192]; | |
| String name = null; | |
| try { | |
| if (args.length == 0) { | |
| name = "standard input"; | |
| // No need to use BufferedInputStream with System.in which | |
| // seems to be fast with one-byte reads. | |
| InputStream in = new LZMAInputStream(System.in); | |
| int size; | |
| while ((size = in.read(buf)) != -1) | |
| System.out.write(buf, 0, size); | |
| } else { | |
| // Read from files given on the command line. | |
| for (int i = 0; i < args.length; ++i) { | |
| name = args[i]; | |
| InputStream in = new FileInputStream(name); | |
| try { | |
| // In contrast to other classes in org.tukaani.xz, | |
| // LZMAInputStream doesn't do buffering internally | |
| // and reads one byte at a time. BufferedInputStream | |
| // gives a huge performance improvement here but even | |
| // then it's slower than the other input streams from | |
| // org.tukaani.xz. | |
| in = new BufferedInputStream(in); | |
| in = new LZMAInputStream(in); | |
| int size; | |
| while ((size = in.read(buf)) != -1) | |
| System.out.write(buf, 0, size); | |
| } finally { | |
| // Close FileInputStream (directly or indirectly | |
| // via LZMAInputStream, it doesn't matter). | |
| in.close(); | |
| } | |
| } | |
| } | |
| } catch (FileNotFoundException e) { | |
| System.err.println("LZMADecDemo: Cannot open " + name + ": " | |
| + e.getMessage()); | |
| System.exit(1); | |
| } catch (EOFException e) { | |
| System.err.println("LZMADecDemo: Unexpected end of input on " | |
| + name); | |
| System.exit(1); | |
| } catch (IOException e) { | |
| System.err.println("LZMADecDemo: Error decompressing from " | |
| + name + ": " + e.getMessage()); | |
| System.exit(1); | |
| } | |
| } | |
| } |