
XZ for Java release notes
=========================

1.5 (2014-03-08)

    * Fix a wrong assertion in BCJ decoders.

    * Use a field instead of reallocating a temporary one-byte buffer
      in read() and write() implementations in several classes.

1.4 (2013-09-22)

    * Add LZMAInputStream for decoding .lzma files and raw LZMA streams.

1.3 (2013-05-12)

    * Fix a data corruption bug when flushing the LZMA2 encoder or
      when using a preset dictionary.

    * Make information about the XZ Block positions and sizes available
      in SeekableXZInputStream by adding the following public functions:
        - int getStreamCount()
        - int getBlockCount()
        - long getBlockPos(int blockNumber)
        - long getBlockSize(int blockNumber)
        - long getBlockCompPos(int blockNumber)
        - long getBlockCompSize(int blockNumber)
        - int getBlockCheckType(int blockNumber)
        - int getBlockNumber(long pos)
        - void seekToBlock(int blockNumber)

    * Minor improvements to javadoc comments were made.

1.2 (2013-01-29)

    * Use fields instead of reallocating frequently-needed temporary
      objects in the LZMA encoder.

    * Fix the contents of xz-${version}-sources.jar.

    * Add OSGi attributes to xz.jar.

1.1 (2012-07-05)

    * The depthLimit argument in the LZMA2Options constructor is
      no longer ignored.

    * LZMA2Options() can no longer throw UnsupportedOptionsException.

    * Fix bugs in the preset dictionary support in the LZMA2 encoder.

1.0 (2011-10-22)

    * The first stable release

