Class StreamCompressor

java.lang.Object
org.apache.commons.compress.archivers.zip.StreamCompressor
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
StreamCompressor.DataOutputCompressor, StreamCompressor.OutputStreamCompressor, StreamCompressor.ScatterGatherBackingStoreCompressor, StreamCompressor.SeekableByteChannelCompressor

public abstract class StreamCompressor extends Object implements Closeable
Encapsulates a Deflater and crc calculator, handling multiple types of output streams. Currently ZipEntry.DEFLATED and ZipEntry.STORED are the only supported compression methods.
Since:
1.10
  • Field Details

    • DEFLATER_BLOCK_SIZE

      private static final int DEFLATER_BLOCK_SIZE
      See Also:
    • def

      private final Deflater def
    • crc

      private final CRC32 crc
    • writtenToOutputStreamForLastEntry

      private long writtenToOutputStreamForLastEntry
    • sourcePayloadLength

      private long sourcePayloadLength
    • totalWrittenToOutputStream

      private long totalWrittenToOutputStream
    • BUFFER_SIZE

      private static final int BUFFER_SIZE
      See Also:
    • outputBuffer

      private final byte[] outputBuffer
    • readerBuf

      private final byte[] readerBuf
  • Constructor Details

    • StreamCompressor

      StreamCompressor(Deflater deflater)
  • Method Details

    • create

      static StreamCompressor create(OutputStream os, Deflater deflater)
      Create a stream compressor with the given compression level.
      Parameters:
      os - The stream to receive output
      deflater - The deflater to use
      Returns:
      A stream compressor
    • create

      static StreamCompressor create(OutputStream os)
      Create a stream compressor with the default compression level.
      Parameters:
      os - The stream to receive output
      Returns:
      A stream compressor
    • create

      static StreamCompressor create(DataOutput os, Deflater deflater)
      Create a stream compressor with the given compression level.
      Parameters:
      os - The DataOutput to receive output
      deflater - The deflater to use for the compressor
      Returns:
      A stream compressor
    • create

      static StreamCompressor create(SeekableByteChannel os, Deflater deflater)
      Create a stream compressor with the given compression level.
      Parameters:
      os - The SeekableByteChannel to receive output
      deflater - The deflater to use for the compressor
      Returns:
      A stream compressor
      Since:
      1.13
    • create

      public static StreamCompressor create(int compressionLevel, ScatterGatherBackingStore bs)
      Create a stream compressor with the given compression level.
      Parameters:
      compressionLevel - The Deflater compression level
      bs - The ScatterGatherBackingStore to receive output
      Returns:
      A stream compressor
    • create

      public static StreamCompressor create(ScatterGatherBackingStore bs)
      Create a stream compressor with the default compression level.
      Parameters:
      bs - The ScatterGatherBackingStore to receive output
      Returns:
      A stream compressor
    • getCrc32

      public long getCrc32()
      The crc32 of the last deflated file
      Returns:
      the crc32
    • getBytesRead

      public long getBytesRead()
      Return the number of bytes read from the source stream
      Returns:
      The number of bytes read, never negative
    • getBytesWrittenForLastEntry

      public long getBytesWrittenForLastEntry()
      The number of bytes written to the output for the last entry
      Returns:
      The number of bytes, never negative
    • getTotalBytesWritten

      public long getTotalBytesWritten()
      The total number of bytes written to the output for all files
      Returns:
      The number of bytes, never negative
    • deflate

      public void deflate(InputStream source, int method) throws IOException
      Deflate the given source using the supplied compression method
      Parameters:
      source - The source to compress
      method - The #ZipArchiveEntry compression method
      Throws:
      IOException - When failures happen
    • write

      long write(byte[] b, int offset, int length, int method) throws IOException
      Writes bytes to ZIP entry.
      Parameters:
      b - the byte array to write
      offset - the start position to write from
      length - the number of bytes to write
      method - the comrpession method to use
      Returns:
      the number of bytes written to the stream this time
      Throws:
      IOException - on error
    • reset

      void reset()
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • flushDeflater

      void flushDeflater() throws IOException
      Throws:
      IOException
    • writeDeflated

      private void writeDeflated(byte[] b, int offset, int length) throws IOException
      Throws:
      IOException
    • deflateUntilInputIsNeeded

      private void deflateUntilInputIsNeeded() throws IOException
      Throws:
      IOException
    • deflate

      void deflate() throws IOException
      Throws:
      IOException
    • writeCounted

      public void writeCounted(byte[] data) throws IOException
      Throws:
      IOException
    • writeCounted

      public void writeCounted(byte[] data, int offset, int length) throws IOException
      Throws:
      IOException
    • writeOut

      protected abstract void writeOut(byte[] data, int offset, int length) throws IOException
      Throws:
      IOException