java 压缩技术

package zip;

import java.io.ByteArrayOutputStream;
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;

public class Test {

public static void main(String[] args) {

String inStr = "@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";
System.err.println("字节压缩/解压缩测试");
System.err.println("输入字符串:\t" + inStr);
byte[] input = inStr.getBytes();
System.err.println("输入字节长度:\t" + input.length);

byte[] data = compress(input);
System.err.println("压缩后字节长度:\t" + data.length);

byte[] output = decompress(data);
System.err.println("解压缩后字节长度:\t" + output.length);
String outputStr = new String(output);
System.err.println("输出字符串:\t" + outputStr);

}

/**
* 压缩
*
* @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();
}
}

测试结果:

时间: 2024-08-06 11:39:31

java 压缩技术的相关文章

Java压缩技术(二) ZIP压缩——Java原生实现

原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZIP的java原生实现. 看了几篇zip压缩算法的帖子,讲的算是比较细致了,但就是没有对应的解压缩实现,太惜败了! 我就喜欢没事做总结,稍作整理,将其收纳! 相关链接: Java压缩技术(一) ZLib Java压缩技术(二) ZIP压缩——Java原生实现 Java压缩技术(三) ZIP解压缩——J

Java压缩技术(三) ZIP解压缩——Java原生实现

原文:http://snowolf.iteye.com/blog/642492 JavaEye的朋友跟我说:“你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读”.ok,面向读者需求,我做调整,这里单说ZIP解压缩! 解压缩与压缩运作方式相反,原理大抵相同,由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Java代码   CheckedInputStream cis = new Checked

Java压缩技术(一) ZLib

原文:http://snowolf.iteye.com/blog/465433 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法,它与ZIP.RAR等归档算法有所不同,与bzip2比较接近. 压缩工具代码如下: Java代码   /** * 2009-9-9 */ package org.zlex.commons.io; import java.io.ByteArrayOutputStream; import java.io.IOEx

Java后端实现图片压缩技术

今天来说说图片压缩技术,为什么要使用图片压缩,图片上传不就完事了吗?对的,这在几年前可以这么说,因为几年前还没有现在这么大的并发,也没有现在这么关注性能. 如今手机很多,很多人都是通过手机访问网络或者app,再调用接口的时候肯定会多多少少的浏览图片,尤其是脱离wifi的情况下,可以看到很多软件展示都会展示小图,这个小图就是压缩的图片,点击后才会放大,如下: 这样的做法可以尽量减少手机端的图片展示压力,因为一个图片对于上传者来说可能是几百K,也有可能是几兆,这样对于手机端无遗展现的压力会比较大,同

Java解压缩技术(一)ZIP压缩-解压缩

Java解压缩技术的实现 GZIP ZIP BZIP2系列实现 没啥好说的,都是些文件操作,直接贴代码 package com.ljh.zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import j

Java解压缩技术(二)GZIP压缩-解压缩(

Java解压缩技术的实现 GZIP ZIP BZIP2 没啥好说的,都是些文件IO操作 package com.ljh.gzip; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExcept

Java解压缩技术(三)BZIP2压缩-解压缩

Java解压缩技术的实现 GZIP ZIP BZIP2 与GZIP  ZIP 不同的是BZIP2在Java中没有实现,BZIP2的实现是Apache提供的Commons-Compress.jar来实现的 关于 Commons Compress请移步:http://commons.apache.org/proper/commons-compress/ 还是直接上代码 package com.ljh.bzip2; import java.io.ByteArrayInputStream; import

(转)java缓存技术,记录

http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI

JAVA缓存技术

最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacO