Java教程:字符串的压缩与解压.doc_第1页
Java教程:字符串的压缩与解压.doc_第2页
Java教程:字符串的压缩与解压.doc_第3页
Java教程:字符串的压缩与解压.doc_第4页
Java教程:字符串的压缩与解压.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java教程:字符串的压缩与解压时间:2012-05-14 09:36点击: 107 次 【大 中 小】 本节摘要:本节主要简单介绍对字符串的压缩与解压。1.引言最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba 服务,我再把corba的返回值封装完成json字符串返回给外部系统。遇到一个接口去调用corba服务,然后corba返回的数据经过封装后字符串的 长度达到7M左右,导致http客户端无法正常的接收完所有的数据。你可能会说这个接口设计的不合理,为什么不增加查询条件把查询条件范围缩小一点?但 是,这个不是本节要讨论的内容,主要是因为corba服务已经发布用了很久且不在此次项目改造范围之内,再者这个corba服务已经上线用了N久,轻易的 改变可能会导致未知的错误。签于此,我想到可以把json格式的字符串给压缩,然后客户端再解压。(一是字符串的压缩比例比较的高,二是字符串的压缩和解 压实现起来也比较简单)。虽然,最后没有用到字符串的压缩和解压的方式,而是修改客户端(1.http客户端进一步精确查询条件 2.读取返回数据流采用循环读取的方式)来解决此问题,我还是把字符串的压缩和解压做一下简单的记录。2.关于压缩与解压压缩算法有多种,我说知道和接触有java I/O自带的zip和gzip两种方式。本节主要来简单介绍一下在系统交互之间遇到大容量的字符串数据交互时,采用一端压缩,另一端再解压的方式来发送和接收数据。关于此次的压缩和解压用到的主要就是GZIPOutputStream和GZIPInputStream类,此类的相关介绍在JDK中有详细的介绍,这里就不再累述了。3.代码如下:压缩:压缩 /* * 字符串的压缩 * * param str * 待压缩的字符串 * return 返回压缩后的字符串 * throws IOException */ public static String compress(String str) throws IOException if (null = str | str.length() /* * 字符串的解压 * * param str * 对字符串解压 * return 返回解压缩后的字符串 * throws IOException */ public static String unCompress(String str) throws IOException if (null = str | str.length() = 0) / 将未压缩数据读入字节数组 / 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流 out.write(buffer, 0, n); / 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 return out.toString(GBK); 完整代码的如下:ZipStrUtil.javapackage gzip;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;/* * *Module: ZipUtil.java *Description: 对字符串的压缩及解压 *Company: *Author: pantp *Date: May 6, 2012 */public class ZipStrUtil public static void main(String args) throws IOException / 字符串超过一定的长度 String str = ABCdef123中文!#$%&*()_+;/1111111111111111111111111AAAAAAAAAAAJDLFJDLFJDLFJLDFFFFJEIIIIIIIIIIFJJJJJJJJJJJJALLLLLLLLLLLLLLLLLLLLLL + LLppppppppppppppppppppppppppppppppppppppppp=-iiiiiiiiiiiiiiiiiiiiiii; System.out.println(n原始的字符串为- + str); float len0=str.length(); System.out.println(原始的字符串长度为-+len0); String ys = compress(str); System.out.println(n压缩后的字符串为- + ys); float len1=ys.length(); System.out.println(压缩后的字符串长度为- + len1); String jy = unCompress(ys); System.out.println(n解压缩后的字符串为- + jy); System.out.println(解压缩后的字符串长度为-+jy.length(); System.out.println(n压缩比例为+len1/len0); /判断 if(str.equals(jy) System.out.println(先压缩再解压以后字符串和原来的是一模一样的); /* * 字符串的压缩 * * param str * 待压缩的字符串 * return 返回压缩后的字符串 * throws IOException */ public static String compress(String str) throws IOException if (null = str | str.length() = 0) return str; / 创建一个新的 byte 数组输出流 ByteArrayOutputStream out = new ByteArrayOutputStream(); / 使用默认缓冲区大小创建新的输出流 GZIPOutputStream gzip = new GZIPOutputStream(out); / 将 b.length 个字节写入此输出流 gzip.write(str.getBytes(); gzip.close(); / 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 return out.toString(ISO-8859-1); /* * 字符串的解压 * * param str * 对字符串解压 * return 返回解压缩后的字符串 * throws IOException */ public static String unCompress(String str) throws IOException if (null = str | str.length() = 0) / 将未压缩数据读入字节数组 / 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流 out.write(buffer, 0, n); / 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 return o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论