最近在做android开发,socket要传报文信息,报文信息是有json格式,数据的重复度很高所以就找了一个压缩字符串的方法,数据越大压缩越明显。
数据传输时,有时需要将数据压缩和解压缩,本例使用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;
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 {
String temp = "l;jsafljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀 看看看看看看看看 ";
System.out.println("原字符串="+temp);
System.out.println("原长="+temp.length());
String temp1 = ZipUtil.compress(temp);
System.out.println("压缩后的字符串="+temp1);
System.out.println("压缩后的长="+temp1.length());
System.out.println("解压后的字符串="+ZipUtil.uncompress(temp1));
}
}
转自:http://www.blogjava.net/fastunit/archive/2008/04/25/195932.html
分享到:
相关推荐
该课程设计可以实现对于英文文本进行字符串压缩解压处理,附带课程设计报告、源代码、运行结果等。
本文实例讲述了C#自定义字符串压缩和解压缩的方法。分享给大家供大家参考。具体如下: class ZipLib { public static string Zip(string value) { //Transform string into byte[] byte[] byteArray = new byte...
两种方法 对字符串进行压缩和解压缩,inflater和deflater。
对字符串,字节数组进行GZIP压缩和解压缩
java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩
主要介绍了php压缩和解压缩字符串的方法,涉及php中gzcompress与gzuncompress的使用技巧,需要的朋友可以参考下
LZ-UTF8是字符串压缩库和格式。 是对字符编码的扩展,使用基于算法的可选压缩来扩展UTF-8字节流。 它的一些特性: 仅压缩字符串。 不支持任意字节序列。 在选择算法及其实现方面均对速度进行了强烈优化。 使用...
MIPS模拟器 使用32位字典对二进制字符串进行压缩和解压缩
字符串zip压缩和解压缩的功能源码,源码zipAndUnzip,iOS上进行字符串的zip压缩和解压缩,不是文件哦,喜欢的朋友可以看看先。this is zip string or unzip data.
本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...
JZlib 是纯 Java 实现的一个新的 zlib 压缩和解压缩包。 标签:JZlib
一个linux下用的c++编写的压缩程序
在python的时候就习惯使用zlib进行网页压缩。 golang下同样使用zlib进行压缩解压缩。 zlib官方给出的方法很简单,这里权当一个补充. zlib.NewWriter() 只能传递 []byte类型数据. NewWriterLevel 可以传递压缩的...
huffman进行编码,解码根据Huffman算法编写一个对文件进行压缩和解压缩的程序。该程序可以对所有的文件类型进行压缩,压缩之后的文件后缀名为huff。
个人测试证明, 这个方法速度挺快, 、LZW压缩方法 LZW压缩技术比其它大多数... 转换表是在压缩或解压缩过程中动态生成的表,该表只在进行压缩或解压缩过程中需要,一旦压缩和解压缩结束,该表将不再起任何作用。
非常简单的一个自编的LZW程序,里面有字典的例子,要压缩的字符串例子。希望对大家有用!
Matlab类可无损压缩和解压缩内存中的数字矩阵和字符串 例子: d = 兰迪 (8,1000,1000); % 生成一些数据M = mkzip(d) % 在 mkzip 对象 M 中返回 d 的压缩版本d = M.unzip; % 返回 d 中未压缩的数据r = M.ratio % ...