package com.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
// 将一个字符串按照zip方式压缩和解压缩
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 str="%5B%7B%22lastUpdateTime%22%3A%222011-10-28+9%3A39%3A41%22%2C%22smsList%22%3A%5B%7B%22liveState%22%3A%221";
System.out.println("原长度:"+str.length());
System.out.println("压缩后:"+ZipUtil.compress(str).length());
System.out.println("解压缩:"+ZipUtil.uncompress(ZipUtil.compress(str)));
}
}
原长度:104
压缩后:95
分享到:
相关推荐
LZ78压缩算法是一种基于字典的无损数据压缩方法,由Abraham Lempel、Jacob Ziv和Stu Arkin在1977年提出。它通过查找输入字符串中的最长匹配前缀来构建一个新的编码,从而实现数据的压缩。这种算法的主要思想是创建一...
字符串压缩通常基于特定的算法,如霍夫曼编码、LZ77、LZ78、Run-Length Encoding (RLE) 或者Burrows-Wheeler Transform (BWT)。这些算法的目标是减少字符串的存储空间,通过识别和利用字符串中的重复模式或统计特性...
### Java算法:实现压缩及解压缩 #### 一、压缩功能实现 在Java中实现文件压缩功能主要依赖于`java.util.zip`包中的类。以下是对压缩代码的详细解析: ##### 1. 导入所需类库 ```java import java.io....
QuickLZ是一款高效的开源压缩库,它在Cocos2d-x框架中被广泛用于字符串压缩。Cocos2d-x是一个跨平台的2D游戏开发框架,支持多种操作系统,包括iOS、Android、Windows等。字符串压缩在游戏开发中非常重要,因为它可以...
由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...
- 解压缩时,首先根据编码表或树结构重建哈夫曼树,然后利用`BitInputStream`读取二进制串,按照编码表还原文本。 6. **文件操作**: - 在实际应用中,哈夫曼编码的压缩结果需要写入文件。Java提供了`...
需要注意的是,Java实现的Huffman压缩解压缩不适用于二进制文件,因为二进制文件的字节分布与ASCII文档不同,直接应用ASCII字符频率统计可能会导致压缩效果不佳。对于二进制文件,通常需要先进行预处理,如使用字节...
java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩
对海量字符串进行排序时,可以使用Java的`Collections.sort()`方法,它基于TimSort算法,具有稳定的排序性能。在特定情况下,还可以自定义比较器以优化排序逻辑。 5. **分治策略(Divide and Conquer)** 对于大...
### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...
在IT行业中,文件的压缩和解压是一项...总的来说,理解和掌握文件压缩和解压的原理,以及处理中文乱码的方法,对Java开发者来说至关重要,这能够帮助他们有效地处理各种文件操作需求,尤其是涉及到多语言环境的时候。
本篇将详细探讨两种主要的方法:Inflater和Deflater,它们分别用于解压缩和压缩字符串。 Deflater是Java中的核心压缩工具,它实现了DEFLATE算法,该算法被广泛应用于如ZIP和GZIP等文件格式。使用Deflater,我们可以...
2. **字符串压缩**: 数据压缩可以减少传输的数据量,提高效率。Android中,可以使用Gzip或者Zlib库进行压缩。Gzip是一种广泛使用的压缩格式,而Zlib则是一个更底层的库,可以用于创建gzip或者其他压缩格式的文件。...
字符串-Java解题分析-学习资料.zip 是一...无论是初学者还是有一定经验的开发者,都可以从中获取有关Java字符串处理的实用知识和技能。 场景目标: 技能提升:帮助开发者提升解决字符串相关问题的能力,提高编程水平。
6. **解压缩**:读取TXZ文件和编码表,按照哈夫曼编码还原字符,再写回TXT文件。 在Java实现过程中,可以将上述步骤封装成类,如`HuffmanEncoder`和`HuffmanDecoder`,分别处理压缩和解压缩任务。`src`目录可能包含...
在本压缩包“java-leetcode题解之第443题压缩字符串.zip”中,包含的是针对LeetCode平台上的第443题“压缩字符串”的Java解决方案。LeetCode是一个在线编程挑战平台,它提供了各种算法题目,帮助程序员提升技能并...
根据给定的信息,我们可以深入探讨Java中文件的压缩与解压缩技术,同时解析字符串内部的工作原理,特别是关于字符串常量池的重要概念。 ### Java中文件的压缩与解压缩 #### 压缩技术概述 在Java中,可以利用标准库...