blob: ba3f21357c2f006dccecb6e5e5279b3d36dc71fa [file] [log] [blame]
/*
* LZMAEncDemo
*
* 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.*;
/**
* Compresses a single file from standard input to standard ouput into
* the .lzma file format.
* <p>
* NOTE: For most purposes, .lzma is a legacy format and usually you should
* use .xz instead.
* <p>
* Two optional arguments are supported:
* <ol>
* <li>LZMA preset level which is an integer in the range [0, 9].
* The default is 6.</li>
* <li>Uncompressed size of the input as bytes.<li>
* </ol>
*/
class LZMAEncDemo {
public static void main(String[] args) throws Exception {
LZMA2Options options = new LZMA2Options();
long inputSize = -1;
if (args.length >= 1)
options.setPreset(Integer.parseInt(args[0]));
if (args.length >= 2)
inputSize = Long.parseLong(args[1]);
System.err.println("Encoder memory usage: "
+ options.getEncoderMemoryUsage() + " KiB");
System.err.println("Decoder memory usage: "
+ options.getDecoderMemoryUsage() + " KiB");
// LZMAOutputStream writes one byte at a time. It helps a little,
// especially in the fastest presets, to use BufferedOutputStream.
OutputStream out = new BufferedOutputStream(System.out);
LZMAOutputStream encoder = new LZMAOutputStream(out, options,
inputSize);
byte[] buf = new byte[8192];
int size;
while ((size = System.in.read(buf)) != -1)
encoder.write(buf, 0, size);
encoder.finish();
out.flush();
}
}