Java实现数据压缩 zlib
来源:互联网 发布:windows phone 10安卓 编辑:程序博客网 时间:2024/05/22 08:08
package com.ecer.common.utils;import java.io.*;import java.util.zip.Deflater;import java.util.zip.DeflaterOutputStream;import java.util.zip.Inflater;import java.util.zip.InflaterInputStream;/** * Created by JiangChunyan on 2016/11/16. * Java实现数据压缩 * ZLib压缩工具 */public abstract class ZLibUtils { /** * 压缩 * * @param data * 待压缩数据 * @return byte[] 压缩后的数据 */ 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; } /** * 压缩 * * @param data * 待压缩数据 * * @param os * 输出流 */ 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(); } } /** * 解压缩 * * @param data * 待压缩的数据 * @return byte[] 解压缩后的数据 */ 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; } /** * 解压缩 * * @param is * 输入流 * @return byte[] 解压缩后的数据 */ 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(); } /** * 以行为单位读取文件,常用于读面向行的格式化文件 */ public static String readFileByLines(String fileName) { File file = new File(fileName); BufferedReader reader = null; StringBuffer bf=new StringBuffer(); try { System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null;// int line = 1; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) {// // 显示行号// System.out.println("line " + line + ": " + tempString);// line++; bf.append(tempString); bf.append(System.getProperty("line.separator")); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return bf.toString(); } public static void main(String[] args) { System.out.println("字节压缩/解压缩测试");// String inputStr = "95.24.118.233 - - [15/Nov/2016:00:00:01 +0800] \"GET /min/?b=myres/js&f=jquery-1.9.1.min.js,jquery-migrate-1.2.1.min.js,jump.js,MSClass.js,projector.js HTTP/1.0\" 200 44985 \"http://forimi-beauty-machines-com.buy.weamax.com/products/page8.html\" \"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36\" style.weamax.com - 0.005\n";// 输入字节长度:371// 压缩后字节长度:293 String inputStr= ZLibUtils.readFileByLines("C:\\Users\\Administrator\\Documents\\weamax_access_log.20161115");// 输入字节长度:39758338// 压缩后字节长度:7081319 System.out.println("输入字符串:" + inputStr); byte[] input = inputStr.getBytes(); System.out.println("输入字节长度:" + input.length); byte[] data = ZLibUtils.compress(input); System.out.println("压缩后字节长度:" + data.length); byte[] output = ZLibUtils.decompress(data); System.out.println("解压缩后字节长度:" + output.length);// String outputStr = new String(output);// System.out.println("输出字符串:" + outputStr); }}
0 0
- Java实现数据压缩 zlib
- java实现HTTP协议数据压缩
- ZLib的数据压缩和解压缩
- 使用zlib库进行数据压缩
- Python模块学习 ---- zlib 数据压缩
- Python模块学习 ---- zlib 数据压缩
- Zlib内存数据压缩和解压缩
- 使用zlib库进行数据压缩、解压缩
- 资料-zlib-数据压缩和加压资料
- Delphi : ZLib的数据压缩和解压缩
- Openssl DTLS 加zlib数据压缩功能异常
- zlib库基于mongodb数据压缩存储测试
- java 数据压缩
- 使用Java来实现网络传输数据压缩的实例
- java实现数据压缩的哈夫曼(Huffman)算法
- 根据哈夫曼编码写数据压缩解压软件(java实现)
- Python模块学习 ---- zlib 数据压缩流(内存数据)
- 《从零开始搭建游戏服务器》 网络数据压缩——Zlib算法
- Http协议入门、Http请求
- SpringMvc支持跨域和自定义header
- STM8S的按键PWM调光灯历程
- 记录Maven和Mybatis整合时打包漏掉mapper的xml文件及其它资源
- 【NOIP模拟题】【数学归纳法】【GCD】2016.11.16 第一题 LGTB 与序列 题解
- Java实现数据压缩 zlib
- iOS点击按钮隐藏状态栏
- Android:pt 、sp、dp之间的换算
- 重力感应
- PostThreadMessage和GetMessage
- centos7安装出现license information(license not accepted)解决办法
- c3p0初始化DataSource报错NoClassDefFoundError:Could not initialize class com.mchange.v2.c3p0.ComboPooledDa
- 注册网页完整案例(jQuery Mobile、validate表单验证、ajax或post、php)
- iOS 自定义Cell按钮的点击代理事件