第一种:返回字节数组
// 压缩
public static byte[] compress(String str) throws IOException {
Log.i(TAG,"--- compress() start ---");
if (str == null || str.length() == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes("UTF-8"));
gzip.close();
Log.i(TAG,"--- compress() end ---");
return out.toByteArray();
}
// 解压缩
public static String decompress(InputStream is) throws IOException {
Log.i(TAG,"--- decompress() start ---");
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPInputStream gunzip = new GZIPInputStream(is);
byte[] buffer = new byte[BUFFER_SIZE];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
Log.i(TAG,"--- decompress() end ---");
return out.toString("UTF-8");
}
//解压缩的出来的文件如果是文本文件的话,还可以一行一行的处理
public static void decompress(InputStream is)
throws Exception {
GZIPInputStream gis = new GZIPInputStream(is);
BufferedReader reader = new BufferedReader(new InputStreamReader(gis,"GBK"));
try {
String line;
while((line = reader.readLine()) != null) {
//处理每行数据
}
} finally {
reader.close();
gis.close();
}
}
第二种:返回字符串
1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码
public static String compress(String str) {
byte[] output = new byte[10000];
Deflater compresser = new Deflater();
compresser.setInput(str.getBytes());
compresser.finish();
int compressDataLength = compresser.deflate(output);
String s = null;
try {
s = new String(output, 0, compressDataLength, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public static String decompress(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[1024];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
// toString()使用平台默认编码,也可以显式的指定如toString("GBK")
return out.toString();
}
三、如下是从一个网站上偷来的
package org.zlex.commons.io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* GZIP工具
*
* @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
* @since 1.0
*/
public abstract class GZipUtils {
public static final int BUFFER = 1024;
public static final String EXT = ".gz";
/**
* 数据压缩
*
* @param data
* @return
* @throws Exception
*/
public static byte[] compress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 压缩
compress(bais, baos);
byte[] output = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return output;
}
/**
* 文件压缩
*
* @param file
* @throws Exception
*/
public static void compress(File file) throws Exception {
compress(file, true);
}
/**
* 文件压缩
*
* @param file
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void compress(File file, boolean delete) throws Exception {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);
compress(fis, fos);
fis.close();
fos.flush();
fos.close();
if (delete) {
file.delete();
}
}
/**
* 数据压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void compress(InputStream is, OutputStream os)
throws Exception {
GZIPOutputStream gos = new GZIPOutputStream(os);
int count;
byte data[] = new byte[BUFFER];
while ((count = is.read(data, 0, BUFFER)) != -1) {
gos.write(data, 0, count);
}
gos.finish();
gos.flush();
gos.close();
}
/**
* 文件压缩
*
* @param path
* @throws Exception
*/
public static void compress(String path) throws Exception {
compress(path, true);
}
/**
* 文件压缩
*
* @param path
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void compress(String path, boolean delete) throws Exception {
File file = new File(path);
compress(file, delete);
}
/**
* 数据解压缩
*
* @param data
* @return
* @throws Exception
*/
public static byte[] decompress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 解压缩
decompress(bais, baos);
data = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return data;
}
/**
* 文件解压缩
*
* @param file
* @throws Exception
*/
public static void decompress(File file) throws Exception {
decompress(file, true);
}
/**
* 文件解压缩
*
* @param file
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void decompress(File file, boolean delete) throws Exception {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT,
""));
decompress(fis, fos);
fis.close();
fos.flush();
fos.close();
if (delete) {
file.delete();
}
}
/**
* 数据解压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void decompress(InputStream is, OutputStream os)
throws Exception {
GZIPInputStream gis = new GZIPInputStream(is);
int count;
byte data[] = new byte[BUFFER];
while ((count = gis.read(data, 0, BUFFER)) != -1) {
os.write(data, 0, count);
}
gis.close();
}
/**
* 文件解压缩
*
* @param path
* @throws Exception
*/
public static void decompress(String path) throws Exception {
decompress(path, true);
}
/**
* 文件解压缩
*
* @param path
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void decompress(String path, boolean delete) throws Exception {
File file = new File(path);
decompress(file, delete);
}
}
分享到:
相关推荐
gzip是Linux环境中广泛使用的文件压缩工具,其源代码主要由C语言编写。本文将深入探讨gzip的原理、C语言实现细节以及如何进行gzip压缩和解压缩。 首先,gzip基于著名的DEFLATE算法,该算法结合了LZ77(一种字典压缩...
这个源码包"gzip源码 (可离线安装gzip)"提供了一种在没有网络连接的情况下安装gzip的可能性,这对于那些需要在隔离环境或者没有网络的服务器上部署gzip的情况非常有用。下面将详细介绍gzip工具以及如何利用提供的...
STM32移植gzip涉及到的是在微控制器环境中实现数据压缩与解压缩的一种技术。STM32是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核的微控制器系列,而gzip是一种广泛使用的数据压缩算法,常用于在...
gzip-1.8.tar.gz 是一个包含gzip 1.8版本源代码的压缩文件,它主要用于在各种操作系统,包括但不限于海思3556V200这样的平台,进行软件开发时的压缩和解压缩操作。gzip是一款广泛使用的命令行工具,基于GNU项目,...
GZIP是一种广泛使用的无损数据压缩算法,尤其在IT领域中扮演着重要角色。这个压缩格式基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv)编码和霍夫曼编码,旨在高效地减小文件大小,同时能够完全恢复原始数据。 ...
`gzip`则是一种广泛使用的数据压缩格式,常用于网络传输,以减少数据传输量,提高效率。本示例主要涉及如何在Delphi中处理gzip压缩的字符串,包括解压和压缩。 在描述中提到的"完整的库文件代码"可能是指`...
标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...
gzip的Windows版,展开由gzip压缩的文件。gzip压缩文件有gzip.exe gzip.doc Readme Copying 四个子文件夹。 gzip 的Window版的gzip, 也就是gzip124xN.exe. 下载 gzip 的Window版的gzip, 也就是gzip124xN.exe。
gzip是一种广泛使用的数据压缩算法,尤其在网络传输和存储大量数据时。它的全称是GNU Zip,最初由Jean-loup Gailly和Mark Adler开发,并且是开源的。gzip不仅可以用于单个文件的压缩,还可以与Unix-like系统的管道...
在互联网通信中,为了减少数据传输量,提升网络性能,许多服务器会将网页内容通过gzip进行压缩后再发送给客户端。libcurl是一个强大的URL传输库,它支持多种协议,包括HTTP,能够处理经gzip压缩的数据。本文将深入...
这里我们关注的是在Windows环境下使用的gunzip和gzip工具,它们是Unix/Linux系统中广泛使用的压缩命令行工具的Windows版本。下面将详细介绍这两个工具以及它们在MySQL数据处理中的应用。 gzip是一款开源的压缩程序...
在IT行业中,gzip是一种广泛使用的数据压缩算法,尤其在Web服务中,用于减少网络传输的数据量,从而提高页面加载速度和降低服务器带宽消耗。Java作为后端开发的重要语言,支持处理gzip压缩,而Ajax(Asynchronous ...
pako是一个高性能的JavaScript库,它实现了多种压缩和解压缩算法,包括gzip。本项目着重介绍了如何使用pako库处理gzip压缩和解压缩,并且解决了中文字符在处理过程中的乱码问题。 gzip是一种广泛使用的数据压缩格式...
本篇文章将深入探讨如何利用JavaScript实现Base64、GZIP和AES的加解密技术,结合“crypto-js”和“pako”这两个库来实现这一目标。 首先,让我们了解这三项技术的基础知识: 1. **Base64编码**:Base64是一种用于...
当这些数据以压缩格式,比如GZIP,传输时,我们需要相应的库来解压缩它们。`Arduino uzlib`库就是为了满足这种需求而存在的,它专门设计用于在Arduino平台上解压gzip格式的数据流。 `uzlib`库是一个小巧且高效的...
C语言编写的GZIP压缩算法是一项基础而重要的技术,它涉及到数据压缩、文件处理和程序设计等多个领域。GZIP是一种广泛使用的数据压缩格式,由GNU项目开发,主要用于减少文件大小,便于存储和传输。在本项目中,我们有...
gzip源码分析与GZIP压缩算法详解 在深入探讨gzip源码和其压缩算法之前,首先需要理解GZIP是什么。GZIP是一种广泛使用的数据压缩格式,主要用于文件传输和存储。它基于DEFLATE算法,该算法结合了LZ77(一种字典压缩...
pako是一个高效的JavaScript库,提供了对多种压缩算法的支持,包括gzip。在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。...
下载gzip-1.10.zip文件后,解压 unzip zip-1.10.zip cd zip-1.10 1.编译本机可用的gzip, ./configure CC="cc" make 该目录下生成可执行文件:gzip gunzip 2.若需要自定义交叉编译工具,解压代码后执行: ./...