java实现zlib压缩解压缩:文件、byte[]字节数组,数据流
来源:互联网 发布:nodetype js 编辑:程序博客网 时间:2024/06/11 05:27
全栈工程师开发手册 (作者:栾鹏)
java教程全解
java实现zlib压缩解压缩。
有关ZLib可参见官方主页 http://www.zlib.net/
ZLib可以简单的理解为压缩/解压缩算法,它与ZIP、RAR等归档算法有所不同,与bzip2比较接近。
测试代码
public static void main(String[] args) { //测试字节数组 System.err.println("字节压缩/解压缩测试"); String inputStr = "snowolf@zlex.org;dongliang@zlex.org;zlex.dongliang@zlex.org"; System.err.println("输入字符串:\t" + inputStr); byte[] input = inputStr.getBytes(); System.err.println("输入字节长度:\t" + input.length); byte[] data = ZLibUtils.compress(input); System.err.println("压缩后字节长度:\t" + data.length); byte[] output = ZLibUtils.decompress(data); System.err.println("解压缩后字节长度:\t" + output.length); String outputStr = new String(output); System.err.println("输出字符串:\t" + outputStr); //测试文件 String filename = "zlib"; File file = new File(filename); System.err.println("文件压缩/解压缩测试"); try { FileOutputStream fos = new FileOutputStream(file); ZLibUtils.compress(input, fos); fos.close(); System.err.println("压缩后字节长度:\t" + file.length()); } catch (Exception e) { System.err.println("错误:\t" + e.getMessage()); } try { FileInputStream fis = new FileInputStream(file); output = ZLibUtils.decompress(fis); fis.close(); } catch (Exception e) { System.err.println("错误:\t" + e.getMessage()); } System.err.println("解压缩后字节长度:\t" + output.length); outputStr = new String(output); System.err.println("输出字符串:\t" + outputStr); }
zlib压缩解压缩工具类的实现
package com.lp.app.io;import java.io.ByteArrayOutputStream; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; //ZLib压缩工具 public class ZLibUtils { //压缩直接数组 public static byte[] compress(byte[] data) { byte[] output = new byte[0]; Deflater compresser = new Deflater(); compresser.reset(); compresser.setInput(data); compresser.finish(); ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length); try { byte[] buf = new byte[1024]; while (!compresser.finished()) { int i = compresser.deflate(buf); bos.write(buf, 0, i); } output = bos.toByteArray(); } catch (Exception e) { output = data; e.printStackTrace(); } finally { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } compresser.end(); return output; } //压缩 字节数组到输出流 public static void compress(byte[] data, OutputStream os) { DeflaterOutputStream dos = new DeflaterOutputStream(os); try { dos.write(data, 0, data.length); dos.finish(); dos.flush(); } catch (IOException e) { e.printStackTrace(); } } //解压缩 字节数组 public static byte[] decompress(byte[] data) { byte[] output = new byte[0]; Inflater decompresser = new Inflater(); decompresser.reset(); decompresser.setInput(data); ByteArrayOutputStream o = new ByteArrayOutputStream(data.length); try { byte[] buf = new byte[1024]; while (!decompresser.finished()) { int i = decompresser.inflate(buf); o.write(buf, 0, i); } output = o.toByteArray(); } catch (Exception e) { output = data; e.printStackTrace(); } finally { try { o.close(); } catch (IOException e) { e.printStackTrace(); } } decompresser.end(); return output; } //解压缩 输入流 到字节数组 public static byte[] decompress(InputStream is) { InflaterInputStream iis = new InflaterInputStream(is); ByteArrayOutputStream o = new ByteArrayOutputStream(1024); try { int i = 1024; byte[] buf = new byte[i]; while ((i = iis.read(buf, 0, i)) > 0) { o.write(buf, 0, i); } } catch (IOException e) { e.printStackTrace(); } return o.toByteArray(); } }
阅读全文
0 0
- java实现zlib压缩解压缩:文件、byte[]字节数组,数据流
- java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
- java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组
- java使用tar算法压缩解压缩文件、数据流、byte[]字节数组
- c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
- vb6中用zlib.dll实现压缩/解压缩字节数组
- java压缩,解压缩zlib文件
- zlib压缩解压缩文件
- 使用zlib压缩解压缩文件
- java实现压缩、解压缩文件
- 使用ZLib 压缩/解压缩 zip文件
- JAVA实现压缩/解压缩zip文件
- JAVA实现压缩,解压缩zip文件
- android ZLib压缩/解压缩
- java 压缩解压缩文件
- java压缩、解压缩文件
- Java 压缩/解压缩 文件
- java实现压缩解压缩
- 数字证书及CA的扫盲介绍
- 概率密度函数和似然估计
- 硬件电路设计基础:三极管(1)
- Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'
- HDOJ2071 Max Num(水题)
- java实现zlib压缩解压缩:文件、byte[]字节数组,数据流
- Python class的__new__与__init__方法
- 300.31输出随机验证码图片
- 学习教程管理
- <meta name="viewport">移动端设置详解
- scrollview实现两条信息展示,单条信息轮播
- 数据结构与算法之线性表
- 设计模式-简单工厂模式
- Codeforces Gym F. Performance Review (树状数组 + DFS 序)