Java压缩/解压缩二进制文件
2013-11-05 12:58
274 查看
在Java中提供Deflater和Inflater工具类来压缩/解压缩数据。
这两个工具类采用zlib算法,下面给出一个封装好的工具。
下面是一个测试:
关于OutOfMemoryError,请参考:http://www.devguli.com/blog/eng/java-deflater-and-outofmemoryerror/
这两个工具类采用zlib算法,下面给出一个封装好的工具。
[code]/** * util for compress/decompress data * * @author lichengwu * @version 1.0 * @created 2013-02-07 10:14 AM */ public final class CompressionUtil { private static final int BUFFER_SIZE = 4 * 1024; /** * compress data by {@linkplain Level} * * @author lichengwu * @created 2013-02-07 * * @param data * @param level * see {@link Level} * @return * @throws IOException */ public static byte[] compress(byte[] data, Level level) throws IOException { Assert.notNull(data); Assert.notNull(level); Deflater deflater = new Deflater(); // set compression level deflater.setLevel(level.getLevel()); deflater.setInput(data); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length); deflater.finish(); byte[] buffer = new byte[BUFFER_SIZE]; while (!deflater.finished()) { int count = deflater.deflate(buffer); // returns the generated // code... index outputStream.write(buffer, 0, count); } byte[] output = outputStream.toByteArray(); outputStream.close(); return output; } /** * decompress data * * @author lichengwu * @created 2013-02-07 * * @param data * @return * @throws IOException * @throws DataFormatException */ public static byte[] decompress(byte[] data) throws IOException, DataFormatException { Assert.notNull(data); Inflater inflater = new Inflater(); inflater.setInput(data); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length); byte[] buffer = new byte[BUFFER_SIZE]; while (!inflater.finished()) { int count = inflater.inflate(buffer); outputStream.write(buffer, 0, count); } byte[] output = outputStream.toByteArray(); outputStream.close(); return output; } /** * Compression level */ public static enum Level { /** * Compression level for no compression. */ NO_COMPRESSION(0), /** * Compression level for fastest compression. */ BEST_SPEED(1), /** * Compression level for best compression. */ BEST_COMPRESSION(9), /** * Default compression level. */ DEFAULT_COMPRESSION(-1); private int level; Level( int level) { this.level = level; } public int getLevel() { return level; } } }
下面是一个测试:
[code]@Test public void testCompress() throws Exception { BufferedInputStream in = new BufferedInputStream(new FileInputStream( "/Users/lichengwu/tmp/out_put.txt.bak")); ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[] temp = new byte[1024]; int size = 0; while ((size = in.read(temp)) != -1) { out.write(temp, 0, size); } in.close(); byte[] data = out.toByteArray(); byte[] output = CompressionUtil.compress(data, CompressionUtil.Level.BEST_COMPRESSION); System.out.println("before : " + (data.length / 1024) + "k"); System.out.println("after : " + (output.length / 1024) + "k"); FileOutputStream fos = new FileOutputStream("/Users/lichengwu/tmp/out_put.txt.bak.compress"); fos.write(output); out.close(); fos.close(); } @Test public void testDecompress() throws Exception { BufferedInputStream in = new BufferedInputStream(new FileInputStream( "/Users/lichengwu/tmp/out_put.txt.bak.compress")); ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[] temp = new byte[1024]; int size = 0; while ((size = in.read(temp)) != -1) { out.write(temp, 0, size); } in.close(); byte[] data = out.toByteArray(); byte[] output = CompressionUtil.decompress(data); System.out.println("before : " + (data.length / 1024) + "k"); System.out.println("after : " + (output.length / 1024) + "k"); FileOutputStream fos = new FileOutputStream("/Users/lichengwu/tmp/out_put.txt.bak.decompress"); fos.write(output); out.close(); fos.close(); }
关于OutOfMemoryError,请参考:http://www.devguli.com/blog/eng/java-deflater-and-outofmemoryerror/
相关文章推荐
- Java压缩/解压缩二进制文件--http中content-encoding:deflate也可以使用
- java对zip压缩文件解压缩
- java编程笔记18 文件压缩与解压缩
- Java压缩和解压缩文件工具
- java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
- Java zip/gzip文件压缩和解压缩
- Java文件压缩与解压缩(三)
- Java用ZIP格式压缩和解压缩文件
- Java操作zip压缩和解压缩文件工具类
- java 对多文件进行压缩与解压缩代码
- Java文件压缩与解压缩(三)
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java实现压缩文件与解压缩文件
- Java案例:压缩与解压缩文件
- java解压缩/压缩/加密压缩/加密解压缩 ZIP4J---ZIP文件压缩与解压缩学习
- java压缩与解压缩文件(利用apache的ant.jar)
- java压缩与解压缩文件(利用apache的ant.jar)
- java压缩解压缩文件工具类的实现
- Java小程序之哈夫曼树与文件压缩和解压缩(二)文件压缩篇
- java代理使用 apache ant实现文件压缩/解压缩