Package org.apache.commons.compress.compressors

# Class CompressorStreamFactory

java.lang.Object
org.apache.commons.compress.compressors.CompressorStreamFactory

All Implemented Interfaces:
  `CompressorStreamProvider`

public class CompressorStreamFactory extends Object implements CompressorStreamProvider

Factory to create Compressor[In|Out]putStreams from names. To add other implementations you should extend CompressorStreamFactory and override the appropriate methods (and call their implementation from super of course).

Example (Compressing a file):

     final OutputStream out = Files.newOutputStream(output.toPath());
     CompressorOutputStream cos = new CompressorStreamFactory().createCompressorOutputStream(CompressorStreamFactory.BZIP2, out);
     IOUtils.copy(Files.newInputStream(input.toPath()), cos);
     cos.close();

Example (Decompressing a file):

     final InputStream is = Files.newInputStream(input.toPath());
     CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream(CompressorStreamFactory.BZIP2, is);
     IOUtils.copy(in, Files.newOutputStream(output.toPath()));
     in.close();

This class is immutable
  provided that the deprecated method setDecompressConcatenated is not used.
This class is thread-safe
  even if the deprecated method setDecompressConcatenated is used

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `BROTLI`
  Constant (value "br") used to identify the BROTLI compression algorithm.
  `static final String`
  `BZIP2`
  Constant (value "bzip2") used to identify the BZIP2 compression algorithm.
  `static final String`
  `DEFLATE`
  Constant (value "deflate") used to identify the Deflate compress method.
  `static final String`
  `DEFLATE64`
  Constant (value "deflate64") used to identify the Deflate64 compress method.
  `static final String`
  `GZIP`
  Constant (value "gz") used to identify the GZIP compression algorithm.
  `static final String`
  `LZ4_BLOCK`
  Constant (value "lz4-block") used to identify the block LZ4 compression method.
  `static final String`
  `LZ4_FRAMED`
  Constant (value "lz4-framed") used to identify the frame LZ4 compression method.
  `static final String`
  `LZMA`
  Constant (value "lzma") used to identify the LZMA compression method.
  `static final String`
  `PACK200`
  Constant (value "pack200") used to identify the PACK200 compression algorithm.
  `static final String`
  `SNAPPY_FRAMED`
  Constant (value "snappy-framed") used to identify the "framed" Snappy compression method.
  `static final String`
  `SNAPPY_RAW`
  Constant (value "snappy-raw") used to identify the "raw" Snappy compression method.
  `static final String`
  `XZ`
  Constant (value "xz") used to identify the XZ compression method.
  `static final String`
  `Z`
  Constant (value "z") used to identify the traditional UNIX compress method.
  `static final String`
  `ZSTANDARD`
  Constant (value "zstd") used to identify the Zstandard compression algorithm.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CompressorStreamFactory()`
  Constructs an instance with the decompress Concatenated option set to false.
  `CompressorStreamFactory(boolean decompressUntilEOF)`
  Constructs an instance with the provided decompress Concatenated option.
  `CompressorStreamFactory(boolean decompressUntilEOF, int memoryLimitInKb)`
  Constructs an instance with the provided decompress Concatenated option.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `CompressorInputStream`
  `createCompressorInputStream(InputStream in)`
  Creates a compressor input stream from an input stream, auto-detecting the compressor type from the first few bytes of the stream.
  `CompressorInputStream`
  `createCompressorInputStream(InputStream in, Set<String> compressorNames)`
  Creates a compressor input stream from an input stream, auto-detecting the compressor type from the first few bytes of the stream while limiting the detected type to the provided set of compressor names.
  `CompressorInputStream`
  `createCompressorInputStream(String name, InputStream in)`
  Creates a compressor input stream from a compressor name and an input stream.
  `CompressorInputStream`
  `createCompressorInputStream(String name, InputStream in, boolean actualDecompressConcatenated)`
  Creates a compressor input stream from a compressor name and an input stream.
  `CompressorOutputStream`
  `createCompressorOutputStream(String name, OutputStream out)`
  Creates a compressor output stream from a compressor name and an output stream.
  `static String`
  `detect(InputStream inputStream)`
  Detects the type of compressor stream.
  `static SortedMap<String,CompressorStreamProvider>`
  `findAvailableCompressorInputStreamProviders()`
  Constructs a new sorted map from input stream provider names to provider objects.
  `static SortedMap<String,CompressorStreamProvider>`
  `findAvailableCompressorOutputStreamProviders()`
  Constructs a new sorted map from output stream provider names to provider objects.
  `static String`
  `getBrotli()`
  `static String`
  `getBzip2()`
  `SortedMap<String,CompressorStreamProvider>`
  `getCompressorInputStreamProviders()`
  `SortedMap<String,CompressorStreamProvider>`
  `getCompressorOutputStreamProviders()`
  `Boolean`
  `getDecompressUntilEOF()`
  `static String`
  `getDeflate()`
  `static String`
  `getDeflate64()`
  `static String`
  `getGzip()`
  `Set<String>`
  `getInputStreamCompressorNames()`
  Gets all the input stream compressor names for this provider
  `static String`
  `getLZ4Block()`
  `static String`
  `getLZ4Framed()`
  `static String`
  `getLzma()`
  `Set<String>`
  `getOutputStreamCompressorNames()`
  Gets all the output stream compressor names for this provider
  `static String`
  `getPack200()`
  `static CompressorStreamFactory`
  `getSingleton()`
  `static String`
  `getSnappyFramed()`
  `static String`
  `getSnappyRaw()`
  `static String`
  `getXz()`
  `static String`
  `getZ()`
  `static String`
  `getZstandard()`
  `void`
  `setDecompressConcatenated(boolean decompressConcatenated)`
  Deprecated.
  1.10 use the `CompressorStreamFactory(boolean)` constructor instead

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### BROTLI

    public static final String BROTLI
    Constant (value "br") used to identify the BROTLI compression algorithm.
    Since:
      1.14
    See Also:
      - Constant Field Values

  - ### BZIP2

    public static final String BZIP2
    Constant (value "bzip2") used to identify the BZIP2 compression algorithm.
    Since:
      1.1
    See Also:
      - Constant Field Values

  - ### GZIP

    public static final String GZIP
    Constant (value "gz") used to identify the GZIP compression algorithm.
    Since:
      1.1
    See Also:
      - Constant Field Values

  - ### PACK200

    public static final String PACK200
    Constant (value "pack200") used to identify the PACK200 compression algorithm.
    Since:
      1.3
    See Also:
      - Constant Field Values

  - ### XZ

    public static final String XZ
    Constant (value "xz") used to identify the XZ compression method.
    Since:
      1.4
    See Also:
      - Constant Field Values

  - ### LZMA

    public static final String LZMA
    Constant (value "lzma") used to identify the LZMA compression method.
    Since:
      1.6
    See Also:
      - Constant Field Values

  - ### SNAPPY_FRAMED

    public static final String SNAPPY_FRAMED
    Constant (value "snappy-framed") used to identify the "framed" Snappy compression method.
    Since:
      1.7
    See Also:
      - Constant Field Values

  - ### SNAPPY_RAW

    public static final String SNAPPY_RAW
    Constant (value "snappy-raw") used to identify the "raw" Snappy compression method. Not supported as an output stream type.
    Since:
      1.7
    See Also:
      - Constant Field Values

  - ### Z

    public static final String Z
    Constant (value "z") used to identify the traditional UNIX compress method. Not supported as an output stream type.
    Since:
      1.7
    See Also:
      - Constant Field Values

  - ### DEFLATE

    public static final String DEFLATE
    Constant (value "deflate") used to identify the Deflate compress method.
    Since:
      1.9
    See Also:
      - Constant Field Values

  - ### DEFLATE64

    public static final String DEFLATE64
    Constant (value "deflate64") used to identify the Deflate64 compress method.
    Since:
      1.16
    See Also:
      - Constant Field Values

  - ### LZ4_BLOCK

    public static final String LZ4_BLOCK
    Constant (value "lz4-block") used to identify the block LZ4 compression method.
    Since:
      1.14
    See Also:
      - Constant Field Values

  - ### LZ4_FRAMED

    public static final String LZ4_FRAMED
    Constant (value "lz4-framed") used to identify the frame LZ4 compression method.
    Since:
      1.14
    See Also:
      - Constant Field Values

  - ### ZSTANDARD

    public static final String ZSTANDARD
    Constant (value "zstd") used to identify the Zstandard compression algorithm. Not supported as an output stream type.
    Since:
      1.16
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### CompressorStreamFactory

    public CompressorStreamFactory()
    Constructs an instance with the decompress Concatenated option set to false.

  - ### CompressorStreamFactory

    public CompressorStreamFactory(boolean decompressUntilEOF)
    Constructs an instance with the provided decompress Concatenated option.
    Parameters:
      `decompressUntilEOF` - if true, decompress until the end of the input; if false, stop after the first stream and leave the input position to point to the next byte after the stream. This setting applies to the gzip, bzip2 and XZ formats only.
    Since:
      1.10

  - ### CompressorStreamFactory

    public CompressorStreamFactory(boolean decompressUntilEOF, int memoryLimitInKb)
    Constructs an instance with the provided decompress Concatenated option.
    Parameters:
      `decompressUntilEOF` - if true, decompress until the end of the input; if false, stop after the first stream and leave the input position to point to the next byte after the stream. This setting applies to the gzip, bzip2 and XZ formats only.
      `memoryLimitInKb` - Some streams require allocation of potentially significant byte arrays/tables, and they can offer checks to prevent OOMs on corrupt files. Set the maximum allowed memory allocation in KBs.
    Since:
      1.14

- ## Method Details

  - ### detect

    public static String detect(InputStream inputStream) throws CompressorException
    Detects the type of compressor stream.
    Parameters:
      `inputStream` - input stream
    Returns:
      type of compressor stream detected
    Throws:
      `CompressorException` - if no compressor stream type was detected or if something else went wrong
      `IllegalArgumentException` - if stream is null or does not support mark
    Since:
      1.14

  - ### findAvailableCompressorInputStreamProviders

    public static SortedMap<String,CompressorStreamProvider> findAvailableCompressorInputStreamProviders()
    Constructs a new sorted map from input stream provider names to provider objects.

    The map returned by this method will have one entry for each provider for which support is available in the current Java virtual machine. If two or more supported provider have the same name then the resulting map will contain just one of them; which one it will contain is not specified.

    The invocation of this method, and the subsequent use of the resulting map, may cause time-consuming disk or network I/O operations to occur. This method is provided for applications that need to enumerate all of the available providers, for example to allow user provider selection.

    This method may return different results at different times if new providers are dynamically made available to the current Java virtual machine.

    Returns:
      An immutable, map from names to provider objects
    Since:
      1.13

  - ### findAvailableCompressorOutputStreamProviders

    public static SortedMap<String,CompressorStreamProvider> findAvailableCompressorOutputStreamProviders()
    Constructs a new sorted map from output stream provider names to provider objects.

    The map returned by this method will have one entry for each provider for which support is available in the current Java virtual machine. If two or more supported provider have the same name then the resulting map will contain just one of them; which one it will contain is not specified.

    The invocation of this method, and the subsequent use of the resulting map, may cause time-consuming disk or network I/O operations to occur. This method is provided for applications that need to enumerate all of the available providers, for example to allow user provider selection.

    This method may return different results at different times if new providers are dynamically made available to the current Java virtual machine.

    Returns:
      An immutable, map from names to provider objects
    Since:
      1.13

  - ### getBrotli

    public static String getBrotli()

  - ### getBzip2

    public static String getBzip2()

  - ### getDeflate

    public static String getDeflate()

  - ### getDeflate64

    public static String getDeflate64()
    Returns:
      the constant `DEFLATE64`
    Since:
      1.16

  - ### getGzip

    public static String getGzip()

  - ### getLZ4Block

    public static String getLZ4Block()

  - ### getLZ4Framed

    public static String getLZ4Framed()

  - ### getLzma

    public static String getLzma()

  - ### getPack200

    public static String getPack200()

  - ### getSingleton

    public static CompressorStreamFactory getSingleton()

  - ### getSnappyFramed

    public static String getSnappyFramed()

  - ### getSnappyRaw

    public static String getSnappyRaw()

  - ### getXz

    public static String getXz()

  - ### getZ

    public static String getZ()

  - ### getZstandard

    public static String getZstandard()

  - ### createCompressorInputStream

    public CompressorInputStream createCompressorInputStream(InputStream in) throws CompressorException
    Creates a compressor input stream from an input stream, auto-detecting the compressor type from the first few bytes of the stream. The InputStream must support marks, like BufferedInputStream.
    Parameters:
      `in` - the input stream
    Returns:
      the compressor input stream
    Throws:
      `CompressorException` - if the compressor name is not known
      `IllegalArgumentException` - if the stream is null or does not support mark
    Since:
      1.1

  - ### createCompressorInputStream

    public CompressorInputStream createCompressorInputStream(InputStream in, Set<String> compressorNames) throws CompressorException
    Creates a compressor input stream from an input stream, auto-detecting the compressor type from the first few bytes of the stream while limiting the detected type to the provided set of compressor names. The InputStream must support marks, like BufferedInputStream.
    Parameters:
      `in` - the input stream
      `compressorNames` - compressor names to limit autodetection
    Returns:
      the compressor input stream
    Throws:
      `CompressorException` - if the autodetected compressor is not in the provided set of compressor names
      `IllegalArgumentException` - if the stream is null or does not support mark
    Since:
      1.25.0

  - ### createCompressorInputStream

    public CompressorInputStream createCompressorInputStream(String name, InputStream in) throws CompressorException
    Creates a compressor input stream from a compressor name and an input stream.
    Parameters:
      `name` - of the compressor, i.e. "gz", "bzip2", "xz", "lzma", "pack200", "snappy-raw", "snappy-framed", "z", "lz4-block", "lz4-framed", "zstd", "deflate64" or "deflate"
      `in` - the input stream
    Returns:
      compressor input stream
    Throws:
      `CompressorException` - if the compressor name is not known or not available, or if there's an IOException or MemoryLimitException thrown during initialization
      `IllegalArgumentException` - if the name or input stream is null

  - ### createCompressorInputStream

    public CompressorInputStream createCompressorInputStream(String name, InputStream in, boolean actualDecompressConcatenated) throws CompressorException
    Description copied from interface: `CompressorStreamProvider`
    Creates a compressor input stream from a compressor name and an input stream.
    Specified by:
      `createCompressorInputStream` in interface `CompressorStreamProvider`
    Parameters:
      `name` - of the compressor, i.e. "gz", "bzip2", "xz", "lzma", "pack200", "snappy-raw", "snappy-framed", "z" or "deflate"
      `in` - the input stream
      `actualDecompressConcatenated` - if true, decompress until the end of the input; if false, stop after the first stream and leave the input position to point to the next byte after the stream. This setting applies to the gzip, bzip2 and XZ formats only.
    Returns:
      compressor input stream
    Throws:
      `CompressorException` - if the compressor name is not known

  - ### createCompressorOutputStream

    public CompressorOutputStream createCompressorOutputStream(String name, OutputStream out) throws CompressorException
    Creates a compressor output stream from a compressor name and an output stream.
    Specified by:
      `createCompressorOutputStream` in interface `CompressorStreamProvider`
    Parameters:
      `name` - the compressor name, i.e. "gz", "bzip2", "xz", "pack200", "snappy-framed", "lz4-block", "lz4-framed", "zstd" or "deflate"
      `out` - the output stream
    Returns:
      the compressor output stream
    Throws:
      `CompressorException` - if the archiver name is not known
      `IllegalArgumentException` - if the archiver name or stream is null

  - ### getCompressorInputStreamProviders

    public SortedMap<String,CompressorStreamProvider> getCompressorInputStreamProviders()

  - ### getCompressorOutputStreamProviders

    public SortedMap<String,CompressorStreamProvider> getCompressorOutputStreamProviders()

  - ### getDecompressUntilEOF

    public Boolean getDecompressUntilEOF()

  - ### getInputStreamCompressorNames

    public Set<String> getInputStreamCompressorNames()
    Description copied from interface: `CompressorStreamProvider`
    Gets all the input stream compressor names for this provider
    Specified by:
      `getInputStreamCompressorNames` in interface `CompressorStreamProvider`
    Returns:
      all the input compressor names for this provider

  - ### getOutputStreamCompressorNames

    public Set<String> getOutputStreamCompressorNames()
    Description copied from interface: `CompressorStreamProvider`
    Gets all the output stream compressor names for this provider
    Specified by:
      `getOutputStreamCompressorNames` in interface `CompressorStreamProvider`
    Returns:
      all the output compressor names for this provider

  - ### setDecompressConcatenated

    @Deprecated public void setDecompressConcatenated(boolean decompressConcatenated)
    Deprecated.
    1.10 use the `CompressorStreamFactory(boolean)` constructor instead
    Sets whether to decompress the full input or only the first stream in formats supporting multiple concatenated input streams.

    This setting applies to the gzip, bzip2 and XZ formats only.

    Parameters:
      `decompressConcatenated` - if true, decompress until the end of the input; if false, stop after the first stream and leave the input position to point to the next byte after the stream
    Throws:
      `IllegalStateException` - if the constructor `CompressorStreamFactory(boolean)` was used to create the factory
    Since:
      1.5