Java快速开发平台

www.fastunit.com

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  23 Posts :: 0 Stories :: 95 Comments :: 0 Trackbacks
数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现。

1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

// 将一个字符串按照zip方式压缩和解压缩
public class ZipUtil {

  
// 压缩
  public static String compress(String str) throws IOException {
    
if (str == null || str.length() == 0) {
      
return str;
    }
    ByteArrayOutputStream out 
= new ByteArrayOutputStream();
    GZIPOutputStream gzip 
= new GZIPOutputStream(out);
    gzip.write(str.getBytes());
    gzip.close();
    
return out.toString("ISO-8859-1");
  }

  
// 解压缩
  public static String uncompress(String str) throws IOException {
    
if (str == null || str.length() == 0) {
      
return str;
    }
    ByteArrayOutputStream out 
= new ByteArrayOutputStream();
    ByteArrayInputStream in 
= new ByteArrayInputStream(str
        .getBytes(
"ISO-8859-1"));
    GZIPInputStream gunzip 
= new GZIPInputStream(in);
    
byte[] buffer = new byte[256];
    
int n;
    
while ((n = gunzip.read(buffer)) >= 0) {
      out.write(buffer, 
0, n);
    }
    
// toString()使用平台默认编码,也可以显式的指定如toString("GBK")
    return out.toString();
  }

  
// 测试方法
  public static void main(String[] args) throws IOException {
    System.out.println(ZipUtil.uncompress(ZipUtil.compress(
"中国China")));
  }

}
posted on 2008-04-25 12:37 FastUnit 阅读(1369) 评论(4)  编辑  收藏 所属分类: Java

Feedback

# re: 字符串的压缩和解压缩[未登录] 2008-04-25 22:01 Matthew Chen
toString()不是采用平台默认编码,而是就是unicode,而且("中国China")也是unicode,java内部字符串编码只是这种类型,对外实现读取和写入文本才是使用平台默认编码的。  回复  更多评论
  

# re: 字符串的压缩和解压缩 2008-04-25 23:51 FastUnit
@Matthew Chen
看一下ByteArrayOutputStream.toString()的源码,最终使用的编码是Converters.getDefaultEncodingName(),不同环境下编码可能不同,我的是GBK。  回复  更多评论
  

# re: 字符串的压缩和解压缩 2008-04-29 16:22 晓秋
我的输出结果是这样的.
??China
我的编辑器的系统编码是:utf-8

若指定编码时报错.GZIP is not fomat.  回复  更多评论
  

# re: 字符串的压缩和解压缩 2008-05-06 14:07 FastUnit
@晓秋
不要修改过渡编码“ISO-8859-1”;
传入字符的编码是什么,解压的时候就指定这个编码,在uncompress方法的最后一句中指定,如“return out.toString("UTF-8");”  回复  更多评论
  


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-25 12:41 编辑过