Class CompressorStreamFactory

  • All Implemented Interfaces:
    CompressorStreamProvider

    public class CompressorStreamFactory
    extends java.lang.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();
     
    • Field Detail

      • BROTLI

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

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

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

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

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

        public static final java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.String DEFLATE
        Constant (value "deflate") used to identify the Deflate compress method.
        Since:
        1.9
        See Also:
        Constant Field Values
      • DEFLATE64

        public static final java.lang.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 java.lang.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 java.lang.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 java.lang.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 Detail

      • CompressorStreamFactory

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

        public CompressorStreamFactory​(boolean decompressUntilEOF)
        Create 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)
        Create 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 Detail

      • detect

        public static java.lang.String detect​(java.io.InputStream inputStream)
                                       throws CompressorException
        Try to detect 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
        java.lang.IllegalArgumentException - if stream is null or does not support mark
        Since:
        1.14
      • findAvailableCompressorInputStreamProviders

        public static java.util.SortedMap<java.lang.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 java.util.SortedMap<java.lang.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 java.lang.String getBrotli()
      • getBzip2

        public static java.lang.String getBzip2()
      • getDeflate

        public static java.lang.String getDeflate()
      • getDeflate64

        public static java.lang.String getDeflate64()
        Returns:
        the constant DEFLATE64
        Since:
        1.16
      • getGzip

        public static java.lang.String getGzip()
      • getLZ4Block

        public static java.lang.String getLZ4Block()
      • getLZ4Framed

        public static java.lang.String getLZ4Framed()
      • getLzma

        public static java.lang.String getLzma()
      • getPack200

        public static java.lang.String getPack200()
      • getSnappyFramed

        public static java.lang.String getSnappyFramed()
      • getSnappyRaw

        public static java.lang.String getSnappyRaw()
      • getXz

        public static java.lang.String getXz()
      • getZ

        public static java.lang.String getZ()
      • getZstandard

        public static java.lang.String getZstandard()
      • createCompressorInputStream

        public CompressorInputStream createCompressorInputStream​(java.io.InputStream in)
                                                          throws CompressorException
        Create an compressor input stream from an input stream, autodetecting 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
        java.lang.IllegalArgumentException - if the stream is null or does not support mark
        Since:
        1.1
      • getCompressorInputStreamProviders

        public java.util.SortedMap<java.lang.String,​CompressorStreamProvider> getCompressorInputStreamProviders()
      • getCompressorOutputStreamProviders

        public java.util.SortedMap<java.lang.String,​CompressorStreamProvider> getCompressorOutputStreamProviders()
      • getDecompressUntilEOF

        public java.lang.Boolean getDecompressUntilEOF()
      • setDecompressConcatenated

        @Deprecated
        public void setDecompressConcatenated​(boolean decompressConcatenated)
        Deprecated.
        1.10 use the CompressorStreamFactory(boolean) constructor instead
        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:
        java.lang.IllegalStateException - if the constructor CompressorStreamFactory(boolean) was used to create the factory
        Since:
        1.5