import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.Inflater; public class Test { public static void main(String[] args) { String str = "这是将要被压缩的数据!"; System.out.println("原数据:" + str); byte[] zipData = zip(str); System.out.println("压缩后:" + zipData); byte[] openData = disZip(zipData); System.out.println("解压后:" + new String(openData)); } /** * 压缩算法 * @param str 将要压缩的数据 * @return 压缩后的数据 */ private static byte[] zip(String str){ byte[] input = str.getBytes(); Deflater compressor = new Deflater(); compressor.setLevel(Deflater.BEST_COMPRESSION); compressor.setInput(input); compressor.finish(); ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length); byte[] buf = new byte[1024]; try { while (!compressor.finished()) { int count = compressor.deflate(buf); bos.write(buf, 0, count); bos.flush(); } } catch (IOException e) { e.printStackTrace(); }finally{ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } byte[] compressedData = bos.toByteArray(); return compressedData; } /** * 解压算法 * @param compressedData 压缩数据 * @return 解压缩数据 */ private static byte[] disZip(byte[] compressedData){ Inflater decompressor = new Inflater(); decompressor.setInput(compressedData); ByteArrayOutputStream bos = new ByteArrayOutputStream(compressedData.length); byte[] buf = new byte[1024]; try { while (!decompressor.finished()) { int count = decompressor.inflate(buf); bos.write(buf, 0, count); bos.flush(); } } catch (DataFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } byte[] decompressedData = bos.toByteArray(); return decompressedData; } }