`
xiao_feng68
  • 浏览: 104345 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Gzip 压缩

 
阅读更多
gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩效率.在sun公司发布的jdk中包含了java.util.zip包,对gzip提供了直接支持.使用java语言可以很方便的实现gzip压缩和解压缩.以下是一个压缩和解压缩的最简程序.
(压缩:gzip.java)
import java.io.*;
import java.util.zip.*;

public class gzip
{
public static void main(String[] args)
{
if (args.length !=2)
{
System.out.println("Usage:java gzip ");
System.exit(1);
}
try
{
//打开需压缩文件作为文件输入流
FileInputStream fin=new FileInputStream(args[0]);
//建立压缩文件输出流
FileOutputStream fout=new FileOutputStream(args[1]);
//建立gzip压缩输出流
GZIPOutputStream gzout=new GZIPOutputStream(fout);
byte[] buf=new byte[1024];//设定读入缓冲区尺寸
int num;

while ((num=fin.read(buf)) != -1)
{
gzout.write(buf,0,num);
}
gzout.close();//!!!关闭流,必须关闭所有输入输出流.保证输入输出完整和释放系统资源.
fout.close();
fin.close();
}catch(IOException e)
{
System.out.println(e);
}
}
}
(解压缩:unzip.java)
import java.io.*;
import java.util.zip.*;

public class ungzip
{
public static void main(String[] args)
{
if (args.length !=2)
{
System.out.println("Usage:java ungzip ");
System.exit(1);
}
try
{
//建立gzip压缩文件输入流
FileInputStream fin=new FileInputStream(args[0]);
//建立gzip解压工作流
GZIPInputStream gzin=new GZIPInputStream(fin);
//建立解压文件输出流
FileOutputStream fout=new FileOutputStream(args[1]);
byte[] buf=new byte[1024];
int num;

while ((num=gzin.read(buf,0,buf.length)) != -1)
{
fout.write(buf,0,num);
}
gzin.close();
fout.close();
fin.close();
}catch(IOException e)
{
System.out.println(e);
}
}
}
非面向对象语言要实现保存工作数据(如一个绘图程序保存一幅画面的定义),往往需要一个程序数据格式转换为外部
文件格式存储,工作时再反向转换的过程.实现比较麻烦,编程不透明.而java语言是一种面向对象的语言,使用它的对象序
列化特性,就可实现将工作对象(画面定义对象数据)直接写入硬盘,需要时再直接再读入内存,不需任何额外操作.实现非常
方便.但由于写出对象为java类格式,因此数据冗余度较大.当数据量很大时,往往造成存储文件很大.过多的磁盘操作也导致
数据读入花费了更多时间,占有了大量内存.采用gzip压缩存储对象是解决此类问题的有效手段.(在本人实现的一个监控系
统中,调入一幅测试画面(10万个组件,压缩前7M,压缩后600K),压缩前对如画面后内存为26M,压缩后读入内存为12M,读入速
度也大幅提高.效果十分明显).
java程序开发网络应用程序是它的最大优势,但在某些低速网络情况下(Internet、拨号网络).网络往往造成传输瓶颈,
影响应用效果,对于实时性要求高的应用影响更大.采用压缩可以有效改善通信效果.
可见,在java下的对象gzip压缩有着广泛的应用价值.以下是一个简单事例程序.
(串行化的数据对象文件:Data.java)
import java.io.*;
import java.util.zip.*;
public class Data implements Serializable//继承串行序列化接口
{
String name="匹配";
int age=123;
float height=1.902f;
}
(对象压缩解压缩类文件:compressObject.java)
import java.util.zip.*;
import java.io.*;
public final class compressObject
{
//将Data类型数据对象序列化对象压缩,返回字节数组,压缩后的对象数组可写入文件保存或用于网络传输
public static byte[] writeCompressObject(Data object_)
{
byte[] data_=null;
try
{
//建立字节数组输出流
ByteArrayOutputStream o = new ByteArrayOutputStream();
//建立gzip压缩输出流
GZIPOutputStream gzout=new GZIPOutputStream(o);
//建立对象序列化输出流
ObjectOutputStream out = new ObjectOutputStream(gzout);
out.writeObject(object_);
out.flush();
out.close();
gzout.close();
//返回压缩字节流
data_=o.toByteArray();
o.close();
}catch(IOException e)
{
System.out.println(e);
}
return(data_);
}
//将压缩字节数组还原为Data类型数据对象
public static Data readCompressObject(byte[] data_)
{
Data object_=null;
try
{
//建立字节数组输入流
ByteArrayInputStream i = new ByteArrayInputStream(data_);
//建立gzip解压输入流
GZIPInputStream gzin=new GZIPInputStream(i);
//建立对象序列化输入流
ObjectInputStream in = new ObjectInputStream(gzin);
//按制定类型还原对象
object_=(Data)in.readObject();
i.close();
gzin.close();
in.close();
}catch(ClassNotFoundException e)
{
System.out.println(e);
}catch(IOException e)
{
System.out.println(e);
}
return(object_);
}
}
(主程序:test.java)
import java.io.*;
import java.util.zip.*;

public class test
{
public static void main(String[] args)
{
Data testData_=new Data();
//未压缩数据对象内容
System.out.println("name="+testData_.name+" age="+testData_.age+" height="+testData_.height);
//压缩
byte[] i_=compressObject.writeCompressObject(testData_);

/*
可执行保存或网络传输,需要时还原或在对端还原
*/

//解压缩
Data o_=compressObject.readCompressObject(i_);
//解压缩后对象内容
System.out.println("name="+o_.name+" age="+o_.age+" height="+o_.height);
}
}
以上只是java下应用gzip压缩的一个简单例子,请大家举一反三在自己的开发中使用.由于本人水平所限,不当之处 
分享到:
评论
1 楼 rawli 2012-06-19  
您写得太好了,谢谢呀!辛苦了!加油!

相关推荐

    gzip.rar_C gzip源码_c语言gzip_gzip压缩_gzip解压_poetryfem

    本文将深入探讨gzip的原理、C语言实现细节以及如何进行gzip压缩和解压缩。 首先,gzip基于著名的DEFLATE算法,该算法结合了LZ77(一种字典压缩方法)和霍夫曼编码(一种变长编码技术)。在C语言中实现gzip,我们...

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...

    pako gzip 压缩和解压缩(支持中文)

    在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...

    C语言编写的GZIP压缩算法(含工程文件,附带测试程序)

    C语言编写的GZIP压缩算法是一项基础而重要的技术,它涉及到数据压缩、文件处理和程序设计等多个领域。GZIP是一种广泛使用的数据压缩格式,由GNU项目开发,主要用于减少文件大小,便于存储和传输。在本项目中,我们有...

    pako gzip 压缩和解压缩(支持中文).rar

    本项目着重介绍了如何使用pako库处理gzip压缩和解压缩,并且解决了中文字符在处理过程中的乱码问题。 gzip是一种广泛使用的数据压缩格式,它基于DEFLATE算法,常用于HTTP服务器上的文件传输以减少数据量。然而,...

    apache开启gzip压缩网络传输减少带宽

    Apache 开启 Gzip 压缩网络传输减少带宽 Apache 是一个流行的开源 Web 服务器软件,它提供了许多功能来提高 Web 服务器的性能和安全性。本文将介绍如何在 Apache 中开启 Gzip 压缩功能,以减少网络传输的带宽。 ...

    IIS启用GZIP压缩js、css无效的原因及解决方法.docx

    在IT开发领域,提高网站性能是至关重要的,其中一种常用的方法是启用服务器的GZIP压缩,以减小网页传输的数据量,加快页面加载速度。本文主要探讨的是在IIS服务器上启用GZIP压缩针对JavaScript(js)和CSS文件无效的...

    使用libcurl获取经过gzip压缩的网页文件

    本文将深入探讨如何使用libcurl获取并解压这些经过gzip压缩的网页文件。 首先,理解libcurl的基本工作原理。libcurl是一个C语言库,提供了一系列函数接口,用于在各种协议下传输数据。对于HTTP协议,libcurl可以...

    nginx-1.18.0已开启gzip压缩优化vue项目大小.zip

    在这个场景中,我们看到一个关于“nginx-1.18.0已开启gzip压缩优化vue项目大小.zip”的压缩包,它涉及到三个主要的技术领域:Nginx、gzip压缩以及Vue Element Admin。下面我们将详细探讨这些知识点。 首先,Nginx是...

    最简单的gzip压缩

    标题中的“最简单的gzip压缩”可能是指使用gzip命令行工具进行压缩的过程。在命令行界面,用户只需要输入`gzip 文件名`就能压缩指定的文件。解压gzip压缩文件同样简单,使用`gunzip 压缩文件名.gz`即可。 描述中...

    IIS网页启用Gzip压缩 提高浏览速度 解决伪静态也可压缩 百度会正常收录

    IIS网页启用Gzip压缩提高浏览速度解决伪静态也可压缩百度会正常收录 IIS网页启用Gzip压缩是提高网页访问速度的重要方法之一。通过启用Gzip压缩,可以减少网页的大小,从而提高浏览速度。但是,很多网站管理员不知道...

    22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件

    以下是一个简单的示例,展示如何从Text文件写入到Gzip压缩的Text文件: ```java conf.set("mapreduce.output.fileoutputformat.compress", "true"); conf.set("mapreduce.output.fileoutputformat.compress.codec",...

    gzip源码,gzip压缩算法

    gzip源码分析与GZIP压缩算法详解 在深入探讨gzip源码和其压缩算法之前,首先需要理解GZIP是什么。GZIP是一种广泛使用的数据压缩格式,主要用于文件传输和存储。它基于DEFLATE算法,该算法结合了LZ77(一种字典压缩...

    gzip 压缩 三种方法

    在IT行业中,压缩技术是数据传输和存储时不可或缺的一部分,特别是在网络环境中,为了减少带宽消耗和加快网页加载速度,gzip压缩被广泛使用。本文将详细介绍如何在PHP环境中利用gzip进行数据压缩,涵盖两种服务器端...

    gzip压缩js,csss文件

    在Web服务器上启用gzip压缩,可以显著降低页面的加载时间,尤其是在带宽有限的情况下,效果尤为明显。 首先,我们要准备要压缩的js和css文件,并将它们放入一个名为“gzip”的文件夹下。这样做是为了方便管理和操作...

    Vue CLI3 开启gzip压缩文件的方式

    webpack在打包时可以借助 compression webpack plugin 实现gzip压缩,首先需要安装该插件: npm i -D compression-webpack-plugin 在vue cli3.0 生成的项目里,可在 vue.config.js 中按照如下方式进行配置: 压缩...

    Delphi gzip 压缩 解压 zlib 源码(128版,123版)

    在Delphi中,我们可以直接利用`zlib`库来处理gzip压缩,因为它支持多种压缩和解压缩格式。`zlib.123`和`zlib.128`可能是两个不同版本的Delphi封装的zlib库,可能分别对应版本号123和128,其中123版包含了一个示例...

    Gzip压缩技术以及压缩算法

    Gzip压缩技术是一种广泛应用于互联网的数据压缩方法,其主要目的是减少数据传输量,提高网络传输效率,尤其是在HTTP协议中,Gzip编码能够显著加快网页加载速度。Gzip是由GNU项目中的开发者Jean-loup Gailly和Mark ...

    Gzip压缩软件(gz文件压缩)

    Gzip压缩软件是一种广泛使用的数据压缩工具,尤其在Unix-like操作系统和Linux系统中非常常见。它的主要功能是将文件进行压缩,生成后缀为.gz的压缩文件,从而节省存储空间和提高传输效率。Gzip软件的全名是GNU zip,...

    WebLogic的GZip压缩

    WebLogic的GZip压缩是一种优化技术,用于减少通过网络传输的数据量,特别是在Web应用程序中,可以显著提升网页加载速度和服务器性能。GZip压缩利用了HTTP协议中的Content-Encoding头,服务器在发送响应到客户端...

Global site tag (gtag.js) - Google Analytics