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);}
}