压缩字符串:
1. 创建字符串写入输出流os, 用于接收压缩后的byte[]
2. 用os 创建 GZIPOutputStream 对象gos
3. 将要压缩的字符串写入gos
4. 关闭gos
5. 从os中获取压缩后的内容
注意: 第4步和第5步顺序不能颠倒, 否则会抛出异常java.io.EOFException: Unexpected end of ZLIB input stream.
完整代码如下:
public static byte[] zip(String src) {
ByteArrayOutputStream os = null;
GZIPOutputStream gos = null;
byte[] dest = null;
try {
if (src == null) {
return dest;
}
os = new ByteArrayOutputStream();
gos = new GZIPOutputStream(os);
gos.write(src.getBytes("utf-8"));
IOUtils.closeQuietly(gos);
dest = os.toByteArray();
}catch (Exception e) {
throw new RuntimeException("Error zip string:" + src, e);
}finally {
IOUtils.closeQuietly(os);
}
return dest;
}
解压字符串:
大致过程和压缩差不多,就不啰嗦了.
注意要先关闭GZIPInputStream 再获取内容
public static String unzip(byte[] bytes) {
if (bytes == null) {
return null;
}
ByteArrayInputStream is = null;
ByteArrayOutputStream os = null;
GZIPInputStream gis = null;
String dest = null;
try {
is = new ByteArrayInputStream(bytes);
os = new ByteArrayOutputStream();
gis = new GZIPInputStream(is);
byte[] buffer = new byte[100];
for (int length = gis.read(buffer, 0, buffer.length); length > 0; length = gis.read(buffer)) {
os.write(buffer, 0, length);
}
IOUtils.closeQuietly(gis);
IOUtils.closeQuietly(is);
dest = os.toString("utf-8");
}catch (Exception e) {
throw new RuntimeException("Error unzip bytes:" + bytes, e);
}finally {
IOUtils.closeQuietly(os);
}
return dest;
}
分享到:
相关推荐
通过理解和实现LZ78算法,不仅可以学习到数据压缩的基本原理,还能深入理解字符串处理、字典数据结构和位操作等编程技巧。在实际应用中,LZ78算法常被用作其他更高效压缩算法的基础,例如LZW(Lempel-Ziv-Welch)...
字符串的压缩和解压,java语言编写,zip实现,代码编写
BWT 结合其他压缩算法,如Move-to-Front (MTF) 或者Burrows-Wheeler Block Sort (BWTS),可以实现高效的字符串压缩。 在执行字符串解压缩时,我们需要根据压缩时所使用的特定算法,逆向操作来恢复原始字符串。例如...
### Java算法:实现压缩及解压缩 #### 一、压缩功能实现 在Java中实现文件压缩功能主要依赖于`java.util.zip`包中的类。以下是对压缩代码的详细解析: ##### 1. 导入所需类库 ```java import java.io....
总的来说,哈夫曼编码是数据压缩领域的一个经典算法,它在Java等编程语言中的实现涉及到数据结构、文件操作和算法等多个方面,对于提升编程能力有着显著的帮助。通过理解和实践这个项目,不仅可以掌握哈夫曼编码的...
在`GzipUtils.java`和`ZipUtils.java`中,作者可能实现了一些功能,如压缩和解压缩的方法。这些方法可能使用了Java内置的`java.util.zip`包,其中`GZIPOutputStream`和`GZIPInputStream`对应Gzip操作,而`...
java端:返回类型非字符接口调用StringUtils#base64AndCompressJson进行编码压缩 ,返回类型为字符接口调用StringUtils#base64Andcompress js 端:引入压缩包中的js文件 ,调用deBase64AndUncompress进行解压解码
- 包内的“字符串压缩程序”很可能是用某种编程语言实现的,如Python、Java或C++,它可能包含了上述提到的或其它字符串压缩算法的实现。 总的来说,字符串压缩是信息技术中的关键组成部分,它在节省存储资源、提高...
- **读取输入**:从压缩文件中读取第一个索引,根据该索引从词典中获取相应的字符串。 - **扩展词典**:将该字符串与输入流中的下一个索引结合,形成新词,添加到词典中。 - **输出解压缩数据**:将找到的字符串...
根据给定的信息,我们可以深入探讨Java中文件的压缩与解压缩技术,同时解析字符串内部的工作原理,特别是关于字符串常量池的重要概念。 ### Java中文件的压缩与解压缩 #### 压缩技术概述 在Java中,可以利用标准库...
字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求,两端同时改为其他编码方式也可以 从Java和C#的代码看,两者代码上有细微差别,但是思路方面两者基本是一样的 另外一个备忘,Java里边,...
哈夫曼编码是一种高效的数据编码方法...在Java中,我们可以使用面向对象的方式设计数据结构和算法,结合文件操作类实现文件的压缩与解压缩。通过这个过程,我们可以有效地减小文本文件的存储空间,提高存储和传输效率。
本文将深入探讨如何使用Java实现这一功能,主要关注两种常用的压缩格式:ZIP和GZ。 首先,我们要引入Java的内置库`java.util.zip`,它提供了处理ZIP和GZIP格式的类。对于ZIP格式,我们主要使用`ZipOutputStream`来...
也可以将字符串压缩后存入数据库中,下面话不多说了,来一起看看详细的介绍吧。 使用到的类库 GZIPOutputStream 代码示例 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ...
在Java中实现哈夫曼编码的数据压缩和解压软件,需要理解以下几个关键步骤和技术: 1. **构建哈夫曼树**:首先,需要统计输入文本中每个字符的出现频率。然后,基于这些频率构建一个哈夫曼树(也称为最优二叉树)。...
在Java环境中实现LZW压缩,主要涉及以下几个关键步骤和概念: 1. **编码表构建**:LZW算法的核心是编码表,它会随着压缩过程动态更新。初始时,编码表包含所有可能的单个字符或字节,每个字符或字节对应一个唯一的...
总结,Java中的Inflater和Deflater提供了一种有效的方式对字符串进行压缩和解压缩。理解这两个类的工作原理以及如何正确使用它们对于处理大量数据或优化网络传输至关重要。在处理字符串时,还需要考虑字符编码和错误...
这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...
本文将围绕Java实现哈夫曼编码的文件压缩与解压进行详细解析。 首先,我们看到`main`方法调用了`zipFile`和`unZipFile`两个静态方法,分别用于文件的压缩和解压缩操作。`zipFile`方法接收源文件路径和目标压缩文件...