package org.opendedup.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.logging.Logger;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
//import org.h2.compress.LZFInputStream;
//import org.h2.compress.LZFOutputStream;
public class CompressionUtils {
@SuppressWarnings("unused")
private static Logger log = Logger.getLogger("sdfs");
public static byte[] compressZLIB(byte[] input) throws IOException {
// Create the compressor with highest level of compression
Deflater compressor = new Deflater();
compressor.setLevel(Deflater.BEST_SPEED);
// Give the compressor the data to compress
compressor.setInput(input);
compressor.finish();
// Create an expandable byte array to hold the compressed data.
// You cannot use an array that's the same size as the orginal because
// there is no guarantee that the compressed data will be smaller than
// the uncompressed data.
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
// Compress the data
byte[] buf = new byte[1024];
while (!compressor.finished()) {
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
bos.close();
// Get the compressed data
byte[] compressedData = bos.toByteArray();
return compressedData;
}
public static byte[] decompressZLIB(byte[] input) throws IOException {
Inflater decompressor = new Inflater();
decompressor.setInput(input);
// Create an expandable byte array to hold the decompressed data
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
// Decompress the data
byte[] buf = new byte[1024];
while (!decompressor.finished()) {
try {
int count = decompressor.inflate(buf);
bos.write(buf, 0, count);
} catch (DataFormatException e) {
throw new IOException(e.toString());
}
}
bos.close();
// Get the decompressed data
byte[] decompressedData = bos.toByteArray();
return decompressedData;
}
}