/** * Return the appropriate implementation of the zlib compressor. * * @param conf configuration * @return the appropriate implementation of the zlib compressor. */ public static Compressor getZlibCompressor(Configuration conf) { return (isNativeZlibLoaded(conf)) ? new ZlibCompressor(conf) : new BuiltInZlibDeflater(ZlibFactory.getCompressionLevel(conf).compressionLevel()); }
/** * Returns the total number of uncompressed bytes input so far.</p> * * @return the total (non-negative) number of uncompressed bytes input so far */ @Override public long getBytesRead() { checkStream(); return getBytesRead(stream); }
/** * Prepare the compressor to be used in a new stream with settings defined in * the given Configuration. It will reset the compressor's compression level * and compression strategy. * * @param conf Configuration storing new settings */ @Override public void reinit(Configuration conf) { reset(); if (conf == null) { return; } end(stream); level = ZlibFactory.getCompressionLevel(conf); strategy = ZlibFactory.getCompressionStrategy(conf); stream = init(level.compressionLevel(), strategy.compressionStrategy(), windowBits.windowBits()); if(LOG.isDebugEnabled()) { LOG.debug("Reinit compressor with new compression configuration"); } }
/** * Returns the total number of compressed bytes output so far. * * @return the total (non-negative) number of compressed bytes output so far */ @Override public long getBytesWritten() { checkStream(); return getBytesWritten(stream); }
@Override public void reset() { checkStream(); reset(stream); finish = false; finished = false; uncompressedDirectBuf.rewind(); uncompressedDirectBufOff = uncompressedDirectBufLen = 0; keepUncompressedBuf = false; compressedDirectBuf.limit(directBufferSize); compressedDirectBuf.position(directBufferSize); userBufOff = userBufLen = 0; }
rawData = generate(rawDataSize); try { ZlibCompressor compressor = new ZlibCompressor(); ZlibDecompressor decompressor = new ZlibDecompressor(); assertFalse("testZlibCompressDecompress finished error", compressor.finished()); compressor.setInput(rawData, 0, rawData.length); assertTrue("testZlibCompressDecompress getBytesRead before error", compressor.getBytesRead() == 0); compressor.finish(); int cSize = compressor.compress(compressedResult, 0, rawDataSize); assertTrue("testZlibCompressDecompress getBytesRead ather error", compressor.getBytesRead() == rawDataSize); assertTrue( "testZlibCompressDecompress compressed size no less then original size", assertArrayEquals("testZlibCompressDecompress arrays not equals ", rawData, decompressedBytes); compressor.reset(); decompressor.reset(); } catch (IOException ex) {
private byte[] compressDecompressZlib(byte[] rawData, ZlibCompressor zlibCompressor, ZlibDecompressor zlibDecompressor) throws IOException { int cSize = 0; byte[] compressedByte = new byte[rawData.length]; byte[] decompressedRawData = new byte[rawData.length]; zlibCompressor.setInput(rawData, 0, rawData.length); zlibCompressor.finish(); while (!zlibCompressor.finished()) { cSize = zlibCompressor.compress(compressedByte, 0, compressedByte.length); } zlibCompressor.reset(); assertTrue(zlibDecompressor.getBytesWritten() == 0); assertTrue(zlibDecompressor.getBytesRead() == 0); assertTrue(zlibDecompressor.needsInput()); zlibDecompressor.setInput(compressedByte, 0, cSize); assertFalse(zlibDecompressor.needsInput()); while (!zlibDecompressor.finished()) { zlibDecompressor.decompress(decompressedRawData, 0, decompressedRawData.length); } assertTrue(zlibDecompressor.getBytesWritten() == rawData.length); assertTrue(zlibDecompressor.getBytesRead() == cSize); zlibDecompressor.reset(); assertTrue(zlibDecompressor.getRemaining() == 0); assertArrayEquals( "testZlibCompressorDecompressorWithConfiguration array equals error", rawData, decompressedRawData); return decompressedRawData; }
@Override public void setDictionary(byte[] b, int off, int len) { if (stream == 0 || b == null) { throw new NullPointerException(); } if (off < 0 || len < 0 || off > b.length - len) { throw new ArrayIndexOutOfBoundsException(); } setDictionary(stream, b, off, len); }
@Override public void end() { if (stream != 0) { end(stream); stream = 0; } }
/** * Creates a new compressor using the specified compression level. * Compressed data will be generated in ZLIB format. * * @param level Compression level #CompressionLevel * @param strategy Compression strategy #CompressionStrategy * @param header Compression header #CompressionHeader * @param directBufferSize Size of the direct buffer to be used. */ public ZlibCompressor(CompressionLevel level, CompressionStrategy strategy, CompressionHeader header, int directBufferSize) { this.level = level; this.strategy = strategy; this.windowBits = header; stream = init(this.level.compressionLevel(), this.strategy.compressionStrategy(), this.windowBits.windowBits()); this.directBufferSize = directBufferSize; uncompressedDirectBuf = ByteBuffer.allocateDirect(directBufferSize); compressedDirectBuf = ByteBuffer.allocateDirect(directBufferSize); compressedDirectBuf.position(directBufferSize); }
/** * The type of header for compressed data. */ public enum CompressionHeader { /** * No headers/trailers/checksums. */ NO_HEADER (-15), /** * Default headers/trailers/checksums. */ DEFAULT_HEADER (15), /** * Simple gzip headers/trailers. */ GZIP_FORMAT (31); private final int windowBits; CompressionHeader(int windowBits) { this.windowBits = windowBits; } public int windowBits() { return windowBits; } }
n = deflateBytesDirect(); compressedDirectBuf.limit(n);
rawData = generate(rawDataSize); try { ZlibCompressor compressor = new ZlibCompressor(); ZlibDecompressor decompressor = new ZlibDecompressor(); assertFalse("testZlibCompressDecompress finished error", compressor.finished()); compressor.setInput(rawData, 0, rawData.length); assertTrue("testZlibCompressDecompress getBytesRead before error", compressor.getBytesRead() == 0); compressor.finish(); int cSize = compressor.compress(compressedResult, 0, rawDataSize); assertTrue("testZlibCompressDecompress getBytesRead ather error", compressor.getBytesRead() == rawDataSize); assertTrue( "testZlibCompressDecompress compressed size no less then original size", assertArrayEquals("testZlibCompressDecompress arrays not equals ", rawData, decompressedBytes); compressor.reset(); decompressor.reset(); } catch (IOException ex) {
public synchronized void reset() { checkStream(); reset(stream); finish = false; finished = false; uncompressedDirectBuf.rewind(); uncompressedDirectBufOff = uncompressedDirectBufLen = 0; keepUncompressedBuf = false; compressedDirectBuf.limit(directBufferSize); compressedDirectBuf.position(directBufferSize); userBufOff = userBufLen = 0; }
/** * Returns the total number of compressed bytes output so far. * * @return the total (non-negative) number of compressed bytes output so far */ public synchronized long getBytesWritten() { checkStream(); return getBytesWritten(stream); }
private byte[] compressDecompressZlib(byte[] rawData, ZlibCompressor zlibCompressor, ZlibDecompressor zlibDecompressor) throws IOException { int cSize = 0; byte[] compressedByte = new byte[rawData.length]; byte[] decompressedRawData = new byte[rawData.length]; zlibCompressor.setInput(rawData, 0, rawData.length); zlibCompressor.finish(); while (!zlibCompressor.finished()) { cSize = zlibCompressor.compress(compressedByte, 0, compressedByte.length); } zlibCompressor.reset(); assertTrue(zlibDecompressor.getBytesWritten() == 0); assertTrue(zlibDecompressor.getBytesRead() == 0); assertTrue(zlibDecompressor.needsInput()); zlibDecompressor.setInput(compressedByte, 0, cSize); assertFalse(zlibDecompressor.needsInput()); while (!zlibDecompressor.finished()) { zlibDecompressor.decompress(decompressedRawData, 0, decompressedRawData.length); } assertTrue(zlibDecompressor.getBytesWritten() == rawData.length); assertTrue(zlibDecompressor.getBytesRead() == cSize); zlibDecompressor.reset(); assertTrue(zlibDecompressor.getRemaining() == 0); assertArrayEquals( "testZlibCompressorDecompressorWithConfiguration array equals error", rawData, decompressedRawData); return decompressedRawData; }
@Override public void setDictionary(byte[] b, int off, int len) { if (stream == 0 || b == null) { throw new NullPointerException(); } if (off < 0 || len < 0 || off > b.length - len) { throw new ArrayIndexOutOfBoundsException(); } setDictionary(stream, b, off, len); }
@Override public void end() { if (stream != 0) { end(stream); stream = 0; } }
/** * Creates a new compressor using the specified compression level. * Compressed data will be generated in ZLIB format. * * @param level Compression level #CompressionLevel * @param strategy Compression strategy #CompressionStrategy * @param header Compression header #CompressionHeader * @param directBufferSize Size of the direct buffer to be used. */ public ZlibCompressor(CompressionLevel level, CompressionStrategy strategy, CompressionHeader header, int directBufferSize) { this.level = level; this.strategy = strategy; this.windowBits = header; stream = init(this.level.compressionLevel(), this.strategy.compressionStrategy(), this.windowBits.windowBits()); this.directBufferSize = directBufferSize; uncompressedDirectBuf = ByteBuffer.allocateDirect(directBufferSize); compressedDirectBuf = ByteBuffer.allocateDirect(directBufferSize); compressedDirectBuf.position(directBufferSize); }
/** * The type of header for compressed data. */ public static enum CompressionHeader { /** * No headers/trailers/checksums. */ NO_HEADER (-15), /** * Default headers/trailers/checksums. */ DEFAULT_HEADER (15), /** * Simple gzip headers/trailers. */ GZIP_FORMAT (31); private final int windowBits; CompressionHeader(int windowBits) { this.windowBits = windowBits; } public int windowBits() { return windowBits; } }