
XZ for Java
===========

Introduction

    This aims to be a complete implementation of XZ data compression
    in pure Java. Features:
      - Full support for the .xz file format specification version 1.0.4
      - Single-threaded streamed compression and decompression
      - Single-threaded decompression with limited random access support
      - Raw streams (no .xz headers) for advanced users, including LZMA2
        with preset dictionary

    Threading is planned but it is unknown when it will be implemented.

    For the latest source code, see the project home page:

        https://tukaani.org/xz/java.html

    The source code is compatible with Java 5 and later.

Building

    It is recommended to use Apache Ant. Type "ant" to compile the
    classes and create the .jar files. Type "ant doc" to build the
    javadoc HTML documentation. Note that building the documentation
    will download a small file named "package-list" from Oracle to
    enable linking to the documentation of the standard Java classes.

    If you are using OpenJDK 9 or later, you will need to edit the
    "sourcever = 1.5" line in the file "build.properties" before
    running "ant". Set it to 1.6 or higher. The default value 1.5
    isn't supported by OpenJDK 9 or later.

    If you cannot or don't want to use Ant, just compile all .java
    files under the "src" directory.

Demo programs

    You can test compression with XZEncDemo, which compresses from
    standard input to standard output:

        java -jar build/jar/XZEncDemo.jar < foo.txt > foo.txt.xz

    You can test decompression with XZDecDemo, which decompresses to
    standard output:

        java -jar build/jar/XZDecDemo.jar foo.txt.xz

Reporting bugs

    Report bugs to <lasse.collin@tukaani.org> or visit the IRC channel
    #tukaani on Freenode and talk to Larhzu.

