数据压缩java_Java实现数据压缩 zlib

这是一个Java实现的数据压缩工具类,使用ZLib库进行数据的压缩和解压缩。提供静态方法compress和decompress分别用于压缩和解压缩字节数组。同时,类中包含了一个读取文件按行返回内容的方法readFileByLines。
摘要由CSDN通过智能技术生成

packagecom.ecer.common.utils;

importjava.io.*;

importjava.util.zip.Deflater;

importjava.util.zip.DeflaterOutputStream;

importjava.util.zip.Inflater;

importjava.util.zip.InflaterInputStream;

/*** Created by JiangChunyan on 2016/11/16.* Java实现数据压缩* ZLib压缩工具*/public abstract classZLibUtils {

/***压缩**@paramdata*待压缩数据*@returnbyte[]压缩后的数据*/public static byte[] compress(byte[] data) {

byte[] output = new byte[0];

Deflater compresser = newDeflater();

compresser.reset();

compresser.setInput(data);

compresser.finish();

ByteArrayOutputStream bos = newByteArrayOutputStream(data.length);

try{

byte[] buf = new byte[1024];

while(!compresser.finished()) {

inti = 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();

returnoutput;

}

/***压缩**@paramdata*待压缩数据**@paramos*输出流*/public static voidcompress(byte[] data, OutputStream os) {

DeflaterOutputStream dos = newDeflaterOutputStream(os);

try{

dos.write(data, 0, data.length);

dos.finish();

dos.flush();

} catch(IOException e) {

e.printStackTrace();

}

}

/***解压缩**@paramdata*待压缩的数据*@returnbyte[]解压缩后的数据*/public static byte[] decompress(byte[] data) {

byte[] output = new byte[0];

Inflater decompresser = newInflater();

decompresser.reset();

decompresser.setInput(data);

ByteArrayOutputStream o = newByteArrayOutputStream(data.length);

try{

byte[] buf = new byte[1024];

while(!decompresser.finished()) {

inti = 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();

returnoutput;

}

/***解压缩**@paramis*输入流*@returnbyte[]解压缩后的数据*/public static byte[] decompress(InputStream is) {

InflaterInputStream iis = newInflaterInputStream(is);

ByteArrayOutputStream o = newByteArrayOutputStream(1024);

try{

inti = 1024;

byte[] buf = new byte[i];

while((i = iis.read(buf, 0, i)) > 0) {

o.write(buf, 0, i);

}

} catch(IOException e) {

e.printStackTrace();

}

returno.toByteArray();

}

/***以行为单位读取文件,常用于读面向行的格式化文件*/public staticString readFileByLines(String fileName) {

File file = newFile(fileName);

BufferedReader reader = null;

StringBuffer bf=newStringBuffer();

try{

System.out.println("以行为单位读取文件内容,一次读一整行:");

reader = newBufferedReader(newFileReader(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) {

}

}

}

returnbf.toString();

}

public static voidmain(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//压缩后字节长度:293String inputStr= ZLibUtils.readFileByLines("C:\\Users\\Administrator\\Documents\\weamax_access_log.20161115");

//输入字节长度:39758338//压缩后字节长度:7081319System.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);}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值