Android Java 字符串的压缩和解压缩

154 篇文章 0 订阅

最近在做android开发,socket要传报文信息,报文信息是有json格式,数据的重复度很高所以就找了一个压缩字符串的方法,数据越大压缩越明显。

数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现。

1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码

  1. import java.io.ByteArrayInputStream;   
  2. import java.io.ByteArrayOutputStream;   
  3. import java.io.IOException;   
  4. import java.util.zip.GZIPInputStream;   
  5. import java.util.zip.GZIPOutputStream;   
  6.   
  7. public class ZipUtil {   
  8.     // 压缩   
  9.       public static String compress(String str) throws IOException {   
  10.         if (str == null || str.length() == 0) {   
  11.           return str;   
  12.         }   
  13.         ByteArrayOutputStream out = new ByteArrayOutputStream();   
  14.         GZIPOutputStream gzip = new GZIPOutputStream(out);   
  15.         gzip.write(str.getBytes());   
  16.         gzip.close();   
  17.         return out.toString("ISO-8859-1");   
  18.       }   
  19.   
  20.       // 解压缩   
  21.       public static String uncompress(String str) throws IOException {   
  22.         if (str == null || str.length() == 0) {   
  23.           return str;   
  24.         }   
  25.         ByteArrayOutputStream out = new ByteArrayOutputStream();   
  26.         ByteArrayInputStream in = new ByteArrayInputStream(str   
  27.             .getBytes("ISO-8859-1"));   
  28.         GZIPInputStream gunzip = new GZIPInputStream(in);   
  29.         byte[] buffer = new byte[256];   
  30.         int n;   
  31.         while ((n = gunzip.read(buffer)) >= 0) {   
  32.           out.write(buffer, 0, n);   
  33.         }   
  34.         // toString()使用平台默认编码,也可以显式的指定如toString("GBK")   
  35.         return out.toString();   
  36.       }   
  37.   
  38.       // 测试方法   
  39.       public static void main(String[] args) throws IOException {   
  40.         String temp = "l;jsafljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看看看看看  ";   
  41.         System.out.println("原字符串="+temp);   
  42.         System.out.println("原长="+temp.length());   
  43.         String temp1 = ZipUtil.compress(temp);   
  44.         System.out.println("压缩后的字符串="+temp1);   
  45.         System.out.println("压缩后的长="+temp1.length());   
  46.         System.out.println("解压后的字符串="+ZipUtil.uncompress(temp1));   
  47.       }   
  48.   
  49. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值