Class StreamCompressor
- java.lang.Object
-
- org.apache.commons.compress.archivers.zip.StreamCompressor
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
- Direct Known Subclasses:
StreamCompressor.DataOutputCompressor
,StreamCompressor.OutputStreamCompressor
,StreamCompressor.ScatterGatherBackingStoreCompressor
,StreamCompressor.SeekableByteChannelCompressor
public abstract class StreamCompressor extends java.lang.Object implements java.io.Closeable
Encapsulates aDeflater
and crc calculator, handling multiple types of output streams. CurrentlyZipEntry.DEFLATED
andZipEntry.STORED
are the only supported compression methods.- Since:
- 1.10
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
StreamCompressor.DataOutputCompressor
private static class
StreamCompressor.OutputStreamCompressor
private static class
StreamCompressor.ScatterGatherBackingStoreCompressor
private static class
StreamCompressor.SeekableByteChannelCompressor
-
Field Summary
Fields Modifier and Type Field Description private static int
BUFFER_SIZE
private java.util.zip.CRC32
crc
private java.util.zip.Deflater
def
private static int
DEFLATER_BLOCK_SIZE
private byte[]
outputBuffer
private byte[]
readerBuf
private long
sourcePayloadLength
private long
totalWrittenToOutputStream
private long
writtenToOutputStreamForLastEntry
-
Constructor Summary
Constructors Constructor Description StreamCompressor(java.util.zip.Deflater deflater)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
close()
static StreamCompressor
create(int compressionLevel, ScatterGatherBackingStore bs)
Create a stream compressor with the given compression level.(package private) static StreamCompressor
create(java.io.DataOutput os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.(package private) static StreamCompressor
create(java.io.OutputStream os)
Create a stream compressor with the default compression level.(package private) static StreamCompressor
create(java.io.OutputStream os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.(package private) static StreamCompressor
create(java.nio.channels.SeekableByteChannel os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.static StreamCompressor
create(ScatterGatherBackingStore bs)
Create a stream compressor with the default compression level.(package private) void
deflate()
void
deflate(java.io.InputStream source, int method)
Deflate the given source using the supplied compression methodprivate void
deflateUntilInputIsNeeded()
(package private) void
flushDeflater()
long
getBytesRead()
Return the number of bytes read from the source streamlong
getBytesWrittenForLastEntry()
The number of bytes written to the output for the last entrylong
getCrc32()
The crc32 of the last deflated filelong
getTotalBytesWritten()
The total number of bytes written to the output for all files(package private) void
reset()
(package private) long
write(byte[] b, int offset, int length, int method)
Writes bytes to ZIP entry.void
writeCounted(byte[] data)
void
writeCounted(byte[] data, int offset, int length)
private void
writeDeflated(byte[] b, int offset, int length)
protected abstract void
writeOut(byte[] data, int offset, int length)
-
-
-
Field Detail
-
DEFLATER_BLOCK_SIZE
private static final int DEFLATER_BLOCK_SIZE
- See Also:
- Constant Field Values
-
def
private final java.util.zip.Deflater def
-
crc
private final java.util.zip.CRC32 crc
-
writtenToOutputStreamForLastEntry
private long writtenToOutputStreamForLastEntry
-
sourcePayloadLength
private long sourcePayloadLength
-
totalWrittenToOutputStream
private long totalWrittenToOutputStream
-
BUFFER_SIZE
private static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
outputBuffer
private final byte[] outputBuffer
-
readerBuf
private final byte[] readerBuf
-
-
Method Detail
-
create
static StreamCompressor create(java.io.OutputStream os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.- Parameters:
os
- The stream to receive outputdeflater
- The deflater to use- Returns:
- A stream compressor
-
create
static StreamCompressor create(java.io.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(java.io.DataOutput os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.- Parameters:
os
- The DataOutput to receive outputdeflater
- The deflater to use for the compressor- Returns:
- A stream compressor
-
create
static StreamCompressor create(java.nio.channels.SeekableByteChannel os, java.util.zip.Deflater deflater)
Create a stream compressor with the given compression level.- Parameters:
os
- The SeekableByteChannel to receive outputdeflater
- 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
- TheDeflater
compression levelbs
- 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(java.io.InputStream source, int method) throws java.io.IOException
Deflate the given source using the supplied compression method- Parameters:
source
- The source to compressmethod
- The #ZipArchiveEntry compression method- Throws:
java.io.IOException
- When failures happen
-
write
long write(byte[] b, int offset, int length, int method) throws java.io.IOException
Writes bytes to ZIP entry.- Parameters:
b
- the byte array to writeoffset
- the start position to write fromlength
- the number of bytes to writemethod
- the comrpession method to use- Returns:
- the number of bytes written to the stream this time
- Throws:
java.io.IOException
- on error
-
reset
void reset()
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Throws:
java.io.IOException
-
flushDeflater
void flushDeflater() throws java.io.IOException
- Throws:
java.io.IOException
-
writeDeflated
private void writeDeflated(byte[] b, int offset, int length) throws java.io.IOException
- Throws:
java.io.IOException
-
deflateUntilInputIsNeeded
private void deflateUntilInputIsNeeded() throws java.io.IOException
- Throws:
java.io.IOException
-
deflate
void deflate() throws java.io.IOException
- Throws:
java.io.IOException
-
writeCounted
public void writeCounted(byte[] data) throws java.io.IOException
- Throws:
java.io.IOException
-
writeCounted
public void writeCounted(byte[] data, int offset, int length) throws java.io.IOException
- Throws:
java.io.IOException
-
writeOut
protected abstract void writeOut(byte[] data, int offset, int length) throws java.io.IOException
- Throws:
java.io.IOException
-
-