Java教程字符串的压缩与解压文档格式.docx
- 文档编号:17144835
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:7
- 大小:65.14KB
Java教程字符串的压缩与解压文档格式.docx
《Java教程字符串的压缩与解压文档格式.docx》由会员分享,可在线阅读,更多相关《Java教程字符串的压缩与解压文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
但是,这个不是本节要讨论的内容,主要是因为corba服务已经发布用了很久且不在此次项目改造范围之内,再者这个corba服务已经上线用了N久,轻易的改变可能会导致未知的错误。
签于此,我想到可以把json格式的字符串给压缩,然后客户端再解压。
(一是字符串的压缩比例比较的高,二是字符串的压缩和解压实现起来也比较简单)。
虽然,最后没有用到字符串的压缩和解压的方式,而是修改客户端(1.http客户端进一步精确查询条件2.读取返回数据流采用循环读取的方式)来解决此问题,我还是把字符串的压缩和解压做一下简单的记录。
2.关于压缩与解压
压缩算法有多种,我说知道和接触有javaI/O自带的zip和gzip两种方式。
本节主要来简单介绍一下在系统交互之间遇到大容量的字符串数据交互时,采用一端压缩,另一端再解压的方式来发送和接收数据。
关于此次的压缩和解压用到的主要就是GZIPOutputStream和GZIPInputStream类,此类的相关介绍在JDK中有详细的介绍,这里就不再累述了。
3.代码如下:
压缩:
压缩
/**
*字符串的压缩
*
*@paramstr
*
待压缩的字符串
*@return
返回压缩后的字符串
*@throwsIOException
*/
publicstaticStringcompress(Stringstr)throwsIOException{
if(null==str||str.length()<
=0){
returnstr;
}
//创建一个新的byte数组输出流
ByteArrayOutputStreamout=newByteArrayOutputStream();
//使用默认缓冲区大小创建新的输出流
GZIPOutputStreamgzip=newGZIPOutputStream(out);
//将b.length个字节写入此输出流
gzip.write(str.getBytes());
gzip.close();
//使用指定的charsetName,通过解码字节将缓冲区内容转换为字符串
returnout.toString("
ISO-8859-1"
);
解压:
>
/**
*字符串的解压
对字符串解压
返回解压缩后的字符串
publicstaticStringunCompress(Stringstr)throwsIOException{
//创建一个ByteArrayInputStream,使用buf作为其缓冲区数组
ByteArrayInputStreamin=newByteArrayInputStream(str
.getBytes("
));
//使用默认缓冲区大小创建新的输入流
GZIPInputStreamgzip=newGZIPInputStream(in);
byte[]buffer=newbyte[256];
intn=0;
while((n=gzip.read(buffer))>
=0){//将未压缩数据读入字节数组
//将指定byte数组中从偏移量off开始的len个字节写入此byte数组输出流
out.write(buffer,0,n);
GBK"
完整代码的如下:
ZipStrUtil.java
packagegzip;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.util.zip.GZIPInputStream;
importjava.util.zip.GZIPOutputStream;
*Module:
ZipUtil.java
*Description:
对字符串的压缩及解压
*Company:
*Author:
pantp
*Date:
May6,2012
publicclassZipStrUtil{
publicstaticvoidmain(String[]args)throwsIOException{
//字符串超过一定的长度
Stringstr="
ABCdef123中文~!
@#$%^&
*()_+{};
/1111111111111111111111111AAAAAAAAAAAJDLFJDLFJDLFJLDFFFFJEIIIIIIIIIIFJJJJJJJJJJJJALLLLLLLLLLLLLLLLLLLLLL"
+
"
LLppppppppppppppppppppppppppppppppppppppppp===========================------------------------------iiiiiiiiiiiiiiiiiiiiiii"
;
System.out.println("
\n原始的字符串为------->
"
+str);
floatlen0=str.length();
原始的字符串长度为------->
+len0);
Stringys=compress(str);
\n压缩后的字符串为----->
+ys);
floatlen1=ys.length();
压缩后的字符串长度为----->
+len1);
Stringjy=unCompress(ys);
\n解压缩后的字符串为--->
+jy);
解压缩后的字符串长度为--->
+jy.length());
\n压缩比例为"
+len1/len0);
//判断
if(str.equals(jy)){
先压缩再解压以后字符串和原来的是一模一样的"
}
4.测试效果
运行代码中的main方式,测试的效果如下:
说明:
字符串长度很小的时候,测试时你会发现压缩后的长度竟然变长了,字符串必须达到一定长度,压缩比例就可以明显看到很大。
哪位大虾还有什么好的方式处理系统之间大容量数据交互的方式,请指点一二。
我现在的项目中用的是HTTP+JSON的方式。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 教程 字符串 压缩 解压