java.util.zip压缩与解压缩

首先是压缩方法

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)));
}


猜你喜欢

转载自blog.csdn.net/jellyjiao2008/article/details/80309441