欢迎来到天天文库
浏览记录
ID:17689432
大小:112.00 KB
页数:10页
时间:2018-09-04
《java教程:字符串的压缩与解压》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Java教程:字符串的压缩与解压时间:2012-05-1409:36点击:107次【大中小】本节摘要:本节主要简单介绍对字符串的压缩与解压。1.引言最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符串返回给外部系统。遇到一个接口去调用corba服务,然后corba返回的数据经过封装后字符串的长度达到7M左右,导致http客户端无法正常的接收完所有的数据。你可能会说这个接
2、口设计的不合理,为什么不增加查询条件把查询条件范围缩小一点?但是,这个不是本节要讨论的内容,主要是因为corba服务已经发布用了很久且不在此次项目改造范围之内,再者这个corba服务已经上线用了N久,轻易的改变可能会导致未知的错误。签于此,我想到可以把json格式的字符串给压缩,然后客户端再解压。(一是字符串的压缩比例比较的高,二是字符串的压缩和解压实现起来也比较简单)。虽然,最后没有用到字符串的压缩和解压的方式,而是修改客户端(1.http客户端进一步精确查询条件2.读取返回数据流采用循环读取的方式)来
3、解决此问题,我还是把字符串的压缩和解压做一下简单的记录。2.关于压缩与解压压缩算法有多种,我说知道和接触有javaI/O自带的zip和gzip两种方式。本节主要来简单介绍一下在系统交互之间遇到大容量的字符串数据交互时,采用一端压缩,另一端再解压的方式来发送和接收数据。关于此次的压缩和解压用到的主要就是GZIPOutputStream和GZIPInputStream类,此类的相关介绍在JDK中有详细的介绍,这里就不再累述了。 3.代码如下: 压缩:压缩 /** *字符串的压缩 *
4、 *@paramstr * 待压缩的字符串 *@return 返回压缩后的字符串 *@throwsIOException */ publicstaticStringcompress(Stringstr)throwsIOException{ if(null==str
5、
6、str.length()<=0){ returnstr; } //创建一个新的byte数组输出流 B
7、yteArrayOutputStreamout=newByteArrayOutputStream(); //使用默认缓冲区大小创建新的输出流 GZIPOutputStreamgzip=newGZIPOutputStream(out); //将b.length个字节写入此输出流 gzip.write(str.getBytes()); gzip.close(); //使用指定的charsetName,通过解码字节将缓冲区内容转
8、换为字符串 returnout.toString("ISO-8859-1"); }解压:> /** *字符串的解压 * *@paramstr * 对字符串解压 *@return 返回解压缩后的字符串 *@throwsIOException */ publicstaticStringunCompress(Stringstr)throwsIOException{ if(null==str
9、
10、
11、str.length()<=0){ returnstr; } //创建一个新的byte数组输出流 ByteArrayOutputStreamout=newByteArrayOutputStream(); //创建一个ByteArrayInputStream,使用buf作为其缓冲区数组 ByteArrayInputStreamin=newByteArrayInputStream(str
12、.getBytes("ISO-8859-1")); //使用默认缓冲区大小创建新的输入流 GZIPInputStreamgzip=newGZIPInputStream(in); byte[]buffer=newbyte[256]; intn=0; while((n=gzip.read(buffer))>=0){//将未压缩数据读入字节数组
此文档下载收益归作者所有