使用java.util.zip对字符串进行压缩和解压缩
来源:互联网 发布:to:day软件 编辑:程序博客网 时间:2024/04/30 16:39
原文出处: 使用java.util.zip对字符串进行压缩和解压缩
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!
查阅了下资料,总结下面的代码:
- /**
- * 压缩字符串为 byte[]
- * 储存可以使用new sun.misc.BASE64Encoder().encodeBuffer(byte[] b)方法
- * 保存为字符串
- *
- * @param str 压缩前的文本
- * @return
- */
- public staticfinal byte[]compress(Stringstr){
- if(str ==null)
- return null;
- byte[] compressed;
- ByteArrayOutputStream out =null;
- ZipOutputStream zout =null;
- try {
- out = new ByteArrayOutputStream();
- zout = new ZipOutputStream(out);
- zout.putNextEntry(new ZipEntry("0"));
- zout.write(str.getBytes());
- zout.closeEntry();
- compressed = out.toByteArray();
- } catch(IOExceptione){
- compressed = null;
- } finally{
- if(zout !=null) {
- try{zout.close();} catch(IOExceptione){}
- }
- if(out !=null) {
- try{out.close();} catch(IOExceptione){}
- }
- }
- return compressed;
- }
- /**
- * 将压缩后的 byte[] 数据解压缩
- *
- * @param compressed 压缩后的 byte[] 数据
- * @return 解压后的字符串
- */
- public staticfinal Stringdecompress(byte[]compressed){
- if(compressed ==null)
- return null;
- ByteArrayOutputStream out =null;
- ByteArrayInputStream in =null;
- ZipInputStream zin =null;
- String decompressed;
- try {
- out = new ByteArrayOutputStream();
- in = new ByteArrayInputStream(compressed);
- zin = new ZipInputStream(in);
- ZipEntry entry =zin.getNextEntry();
- byte[]buffer = newbyte[1024];
- int offset = -1;
- while((offset =zin.read(buffer)) != -1) {
- out.write(buffer,0, offset);
- }
- decompressed = out.toString();
- } catch(IOExceptione){
- decompressed = null;
- } finally{
- if(zin !=null) {
- try {zin.close();}catch(IOExceptione){}
- }
- if(in !=null) {
- try {in.close();}catch(IOExceptione){}
- }
- if(out !=null) {
- try {out.close();}catch(IOExceptione){}
- }
- }
- return decompressed;
- }
这里需要特别注意的是,如果你想把压缩后的byte[]保存到字符串中,不能直接使用new String(byte)或者byte.toString(),因为这样转换之后容量是增加的。同样的道理,如果是字符串的话,也不能直接使用new String().getBytes()获取byte[]传入到decompress中进行解压缩。
如果保存压缩后的二进制,可以使用new sun.misc.BASE64Encoder().encodeBuffer(byte[] b)将其转换为字符串。同样解压缩的时候首先使用new BASE64Decoder().decodeBuffer 方法将字符串转换为字节,然后解压就可以了。
关于使用 java.util.zip 操作文件和目录,请参考这里:http://www.baidu.com/s?wd=java.util.zip&cl=3
参考资料:
Simple String Compression Functions
http://forum.java.sun.com/thread.jspa?threadID=250124&start=15&tstart=0
使用cookie定制用户UI
http://www.phpx.com/happy/thread-113016-1-24.html
- 使用java.util.zip对字符串进行压缩和解压缩
- 使用java.util.zip对字符串进行压缩和解压缩
- 使用java.util.zip包压缩和解压缩文件
- 使用java.util.zip包压缩和解压缩文件
- 使用Java原生进行压缩和解压缩
- 对字符串,字节数组进行GZIP压缩和解压缩
- Java使用7Zip完成文件的压缩和解压缩
- 使用Deflate算法对文件进行压缩和解压缩
- java实现zip压缩和解压缩 源码
- Java zip/gzip文件压缩和解压缩
- Java zip/gzip文件压缩和解压缩
- 使用java.util.zip压缩、解压文件
- Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)
- java对zip进行压缩和解压
- 【Java】IO操作之使用zip包压缩和解压缩文件
- Java对字符串进行压缩
- 使用ant实现Zip文件压缩和解压缩Zip文件
- java zip API实现压缩和解压缩zip包
- Android入门、源码、文档资源、教程
- 在Unity3D中应用EZGUI中的参数传递
- Scanner 和BufferedReader同样能实现将键盘输入的数据送入程序
- WP7 页面间传值
- 跑马灯
- 使用java.util.zip对字符串进行压缩和解压缩
- 并发与竞争
- 研究记录01—单目视觉提取的特征在SLAM当中的运用
- Windows Phone 7上广告平台的选择
- sdf
- 一个二维数组的排序
- Android小部件布局大小和点击事件
- 浅谈项目的需求分析
- C语言 实现 链表栈