The Apache Commons Compress library defines an API for working with ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200, bzip2, 7z, arj, lzma, snappy, DEFLATE, lz4, Brotli, Zstandard, DEFLATE64 and Z files.
The code in this component has many origins:
The current release is 1.18 and requires Java 7.
Below we highlight some new features, for a full list of changes see the Changes Report.
The compress component is split into compressors and
archivers. While compressors
(un)compress streams that usually store a single
entry, archivers deal with archives that contain
structured content represented
by ArchiveEntry instances which in turn
usually correspond to single files or directories.
Currently the bzip2, Pack200, XZ, gzip, lzma, brotli,
Zstandard and Z formats are
supported as compressors where gzip support is mostly provided by
the java.util.zip package and Pack200 support
by the java.util.jar package of the Java
class library. XZ and lzma support is provided by the public
domain XZ for
Java library. Brotli support is provided by the MIT
licensed Google
Brotli decoder. Zstandard support is provided by the BSD
licensed Zstd-jni.
As of Commons Compress 1.18 support for the DEFLATE64, Z and Brotli
formats is read-only.
The ar, arj, cpio, dump, tar, 7z and zip formats are supported as archivers where the zip implementation provides capabilities that go beyond the features found in java.util.zip. As of Commons Compress 1.18 support for the dump and arj formats is read-only - 7z can read most compressed and encrypted archives but only write unencrypted ones. LZMA(2) support in 7z requires XZ for Java as well.
The compress component provides abstract base classes for compressors and archivers together with factories that can be used to choose implementations by algorithm name. In the case of input streams the factories can also be used to guess the format and provide the matching implementation.