当我们客户端与服务端进行数据传输时需要走流量,为了节省流量我们常常需要写一个压缩类对数据进行压缩。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* GZIP压缩解压类
*/
public class MessageGZIP {
private static String encode = "utf-8";//"ISO-8859-1"
public String getEncode() {
return encode;
}
/*
* 设置 编码,默认编码:UTF-8
*/
public void setEncode(String encode) {
MessageGZIP.encode = encode;
}
/*
* 字符串压缩为字节数组
*/
public static byte[] compressToByte(String str){
if (str == null || str.length() == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip;
try {
gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes(encode));
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
return out.toByteArray();
}
/*
* 字符串压缩为字节数组
*/
public static byte[] compressToByte(String str,String encoding){
if (str == null || str.length() == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip;
try {
gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes(encoding));
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
return out.toByteArray();
}
/*
* 字节数组解压缩后返回字符串
*/
public static String uncompressToString(byte[] b) {
if (b == null || b.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(b);
try {
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
} catch (IOException e) {
e.printStackTrace();
}
return out.toString();
}
/*
* 字节数组解压缩后返回字符串
*/
public static String uncompressToString(byte[] b, String encoding) {
if (b == null || b.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(b);
try {
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString(encoding);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
本文将深入探讨gzip的原理、C语言实现细节以及如何进行gzip压缩和解压缩。 首先,gzip基于著名的DEFLATE算法,该算法结合了LZ77(一种字典压缩方法)和霍夫曼编码(一种变长编码技术)。在C语言中实现gzip,我们...
基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩...
该案例通过zlib实现gzip的压缩解压功能,包括解压gzip字符串、图片两个案例;提供了zlib1211的源码包和对应编译后生成的文件; 相应说明参考笔者博客:Qt笔记8--zlib实现gzip解压,链接...
总结,Java中的GZIP压缩和解压缩文件是通过`GZIPOutputStream`和`GZIPInputStream`类实现的。了解并掌握这些基础知识对于进行Java文件处理和数据传输是非常重要的。同时,根据项目需求,你可能还需要考虑其他优化和...
压缩包子文件的文件名称列表中,“IRAPGZip.dll”很可能是这个GZIP压缩解压库的实现文件,它包含实现GZIP压缩和解压缩功能的函数和类。"Project2.exe"可能是一个示例程序或测试程序,用于演示如何使用这个动态库。而...
在Delphi中,我们可以直接利用`zlib`库来处理gzip压缩,因为它支持多种压缩和解压缩格式。`zlib.123`和`zlib.128`可能是两个不同版本的Delphi封装的zlib库,可能分别对应版本号123和128,其中123版包含了一个示例...
标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...
在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...
标题 "Sun 自带的Gzip压缩解压xml实例" 涉及到的是Java编程语言中使用内置库进行Gzip压缩和解压XML文件的方法。Gzip是一种广泛使用的数据压缩格式,常用于在网络上传输数据时减少文件大小,提高传输效率。在Java中,...
易语言GZIP解压缩源码,GZIP解压缩,GZIP压缩,GZIP解压,InitDecompression,InitCompression,CreateDecompression,CreateCompression,ResetDecompression,ResetCompression,DestroyDecompression,DeInitCompression,...
一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...
要使用GZIP压缩文件,我们首先创建一个`FileOutputStream`对象,然后通过它创建一个`GZIPOutputStream`。将要压缩的数据写入`GZIPOutputStream`,完成后记得关闭流。以下是一个简单的示例: ```java import java.io...
易语言gzip解压缩模块源码,gzip解压缩模块,PeLoader_LoadLibrary,PeLoader_FreeLibrary,PeLoader_GetProcAddress,PeLoader_GetEntryPoint,Call,初始化,GZIP压缩,GZIP解压
本示例主要涉及如何在Delphi中处理gzip压缩的字符串,包括解压和压缩。 在描述中提到的"完整的库文件代码"可能是指`DelphiZLib.123`,这是一个很可能包含`ZLib`库的文件。`ZLib`是一个开源的压缩库,支持多种压缩...
java,JAVA源码Java用GZIP压缩解压文件JAVA源码Java用GZIP压缩解压文件
本文将深入探讨如何使用libcurl获取并解压这些经过gzip压缩的网页文件。 首先,理解libcurl的基本工作原理。libcurl是一个C语言库,提供了一系列函数接口,用于在各种协议下传输数据。对于HTTP协议,libcurl可以...
服务器响应时,如果返回的数据是gzip压缩的,将在`Content-Encoding`头中设置`gzip`。 在VC6环境下,你还需要考虑错误处理,例如检查`gzopen()`、`gzwrite()`和`gzread()`的返回值,它们可能会返回NULL或负数来表示...
这个资源包包含了处理zip、gzip和tar等压缩格式的类,提供了方便的方法来完成这些工作。以下是对这些知识点的详细说明: 1. **PHP**:PHP(PHP:Hypertext Preprocessor)是一种开源的服务器端脚本语言,广泛用于...
首先,需要包含`zlib.h`头文件,并使用`gzbuffer()`设置缓冲区大小,然后调用`gzopen()`创建一个指向内存的gzip压缩流,最后使用`gzwrite()`写入数据并调用`gzclose()`关闭流完成压缩。 2. **内存解压**:解压缩...
Java 中 GZIP 压缩解压类使用实例 Java 中 GZIP 压缩解压类使用实例主要介绍了 Java 中 GZIP 压缩解压类使用实例的相关资料,需要的朋友可以参考下。在实际应用中,数据传输是非常频繁的,为了节省流量,我们常常...