首先是压缩方法
public byte[] compress(byte[] data) throws IOException {
Deflater compresser = new Deflater();//用默认的压缩级别创建一个新的压缩器。
compresser.reset();//重置deflater,以便可以处理一组新的输入数据。
compresser.setInput(data,0,data.length);//设置压缩输入数据。
compresser.finish();//当被调用时,表示压缩应该以输入缓冲区的当前内容结束。
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
byte[] buf = new byte[1024];
while (!compresser.finished()) {
int i = compresser.deflate(buf);//压缩输入数据并用压缩数据填充指定的缓冲区。
bos.write(buf, 0, i);
}
bos.close();
compresser.end();//关闭压缩器并丢弃任何未处理的输入。
return bos.toByteArray();
}
解压缩方法
public byte[] decompress(byte[] data) throws DataFormatException, IOException {
Inflater inflater = new Inflater();// 创建一个新的解压缩器
inflater.reset();
inflater.setInput(data, 0, data.length);// 设置解压缩的输入数据
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
byte[] result = new byte[1024];
int dataLenght = 0;
while (!inflater.finished()) {// 如果已到达压缩数据流的末尾,则返回true
dataLenght = inflater.inflate(result);// 将字节解压缩到指定的缓冲区中
outputStream.write(result, 0, dataLenght);
}
outputStream.close();
inflater.end();// 关闭解压缩器并丢弃任何未处理的输入
return outputStream.toByteArray();
}
测试方法
@Test
public void testRun() throws DataFormatException, IOException {
String msgint = "[email protected]";
byte[] out = compress(msgint.getBytes());
System.out.println(new String(out));
byte[] msgout = decompress(out);
System.out.println(new String(msgout));
System.out.print(msgint.equals(new String(msgout)));
}