JAVA下的GZIP应用

gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩效率.在sun公司发布的jdk中包含了java.util.zip包,对gzip提供了直接支持.使用java语言可以很方便的实现gzip压缩和解压缩.以下是一个压缩和解压缩的最简程序. 
(压缩:gzip.java) 
java 代码
 
  1. import java.io.*;   
  2. import java.util.zip.*;   
  3.   
  4. public class gzip   
  5. {   
  6. public static void main(String[] args)   
  7. {   
  8. if (args.length !=2)   
  9. {   
  10. System.out.println("Usage:java gzip ");   
  11. System.exit(1);   
  12. }   
  13. try   
  14. {   
  15. //打开需压缩文件作为文件输入流   
  16. FileInputStream fin=new FileInputStream(args[0]);   
  17. //建立压缩文件输出流   
  18. FileOutputStream fout=new FileOutputStream(args[1]);   
  19. //建立gzip压缩输出流   
  20. GZIPOutputStream gzout=new GZIPOutputStream(fout);   
  21. byte[] buf=new byte[1024];//设定读入缓冲区尺寸   
  22. int num;   
  23.   
  24. while ((num=fin.read(buf)) != -1)   
  25. {   
  26. gzout.write(buf,0,num);   
  27. }   
  28. gzout.close();//!!!关闭流,必须关闭所有输入输出流.保证输入输出完整和释放系统资源.   
  29. fout.close();   
  30. fin.close();   
  31. }catch(IOException e)   
  32. {   
  33. System.out.println(e);   
  34. }   
  35. }   
  36. }    

(解压缩:unzip.java) 
java 代码
 
  1. import java.io.*;   
  2. import java.util.zip.*;   
  3.   
  4. public class ungzip   
  5. {   
  6. public static void main(String[] args)   
  7. {   
  8. if (args.length !=2)   
  9. {   
  10. System.out.println("Usage:java ungzip ");   
  11. System.exit(1);   
  12. }   
  13. try   
  14. {   
  15. //建立gzip压缩文件输入流   
  16. FileInputStream fin=new FileInputStream(args[0]);   
  17. //建立gzip解压工作流   
  18. GZIPInputStream gzin=new GZIPInputStream(fin);   
  19. //建立解压文件输出流   
  20. FileOutputStream fout=new FileOutputStream(args[1]);   
  21. byte[] buf=new byte[1024];   
  22. int num;   
  23.   
  24. while ((num=gzin.read(buf,0,buf.length)) != -1)   
  25. {   
  26. fout.write(buf,0,num);   
  27. }   
  28. gzin.close();   
  29. fout.close();   
  30. fin.close();   
  31. }catch(IOException e)   
  32. {   
  33. System.out.println(e);   
  34. }   
  35. }   
  36. }    

非面向对象语言要实现保存工作数据(如一个绘图程序保存一幅画面的定义),往往需要一个程序数据格式转换为外部 
文件格式存储,工作时再反向转换的过程.实现比较麻烦,编程不透明.而java语言是一种面向对象的语言,使用它的对象序 
列化特性,就可实现将工作对象(画面定义对象数据)直接写入硬盘,需要时再直接再读入内存,不需任何额外操作.实现非常 
方便.但由于写出对象为java类格式,因此数据冗余度较大.当数据量很大时,往往造成存储文件很大.过多的磁盘操作也导致 
数据读入花费了更多时间,占有了大量内存.采用gzip压缩存储对象是解决此类问题的有效手段.(在本人实现的一个监控系 
统中,调入一幅测试画面(10万个组件,压缩前7M,压缩后600K),压缩前对如画面后内存为26M,压缩后读入内存为12M,读入速 
度也大幅提高.效果十分明显). 
java程序开发网络应用程序是它的最大优势,但在某些低速网络情况下(Internet、拨号网络).网络往往造成传输瓶颈, 
影响应用效果,对于实时性要求高的应用影响更大.采用压缩可以有效改善通信效果. 
可见,在java下的对象gzip压缩有着广泛的应用价值.以下是一个简单事例程序. 
(串行化的数据对象文件:Data.java) 
java 代码
 
  1. import java.io.*;   
  2. import java.util.zip.*;   
  3. public class Data implements Serializable//继承串行序列化接口   
  4. {   
  5. String name="匹配";   
  6. int age=123;   
  7. float height=1.902f;   
  8. }   
  9. (对象压缩解压缩类文件:compressObject.java)   
  10. import java.util.zip.*;   
  11. import java.io.*;   
  12. public final class compressObject   
  13. {   
  14. //将Data类型数据对象序列化对象压缩,返回字节数组,压缩后的对象数组可写入文件保存或用于网络传输   
  15. public static byte[] writeCompressObject(Data object_)   
  16. {   
  17. byte[] data_=null;   
  18. try   
  19. {   
  20. //建立字节数组输出流   
  21. ByteArrayOutputStream o = new ByteArrayOutputStream();   
  22. //建立gzip压缩输出流   
  23. GZIPOutputStream gzout=new GZIPOutputStream(o);   
  24. //建立对象序列化输出流   
  25. ObjectOutputStream out = new ObjectOutputStream(gzout);   
  26. out.writeObject(object_);   
  27. out.flush();   
  28. out.close();   
  29. gzout.close();   
  30. //返回压缩字节流   
  31. data_=o.toByteArray();   
  32. o.close();   
  33. }catch(IOException e)   
  34. {   
  35. System.out.println(e);   
  36. }   
  37. return(data_);   
  38. }   
  39. //将压缩字节数组还原为Data类型数据对象   
  40. public static Data readCompressObject(byte[] data_)   
  41. {   
  42. Data object_=null;   
  43. try   
  44. {   
  45. //建立字节数组输入流   
  46. ByteArrayInputStream i = new ByteArrayInputStream(data_);   
  47. //建立gzip解压输入流   
  48. GZIPInputStream gzin=new GZIPInputStream(i);   
  49. //建立对象序列化输入流   
  50. ObjectInputStream in = new ObjectInputStream(gzin);   
  51. //按制定类型还原对象   
  52. object_=(Data)in.readObject();   
  53. i.close();   
  54. gzin.close();   
  55. in.close();   
  56. }catch(ClassNotFoundException e)   
  57. {   
  58. System.out.println(e);   
  59. }catch(IOException e)   
  60. {   
  61. System.out.println(e);   
  62. }   
  63. return(object_);   
  64. }   
  65. }    

(主程序:test.java) 
java 代码
 
  1. import java.io.*;   
  2. import java.util.zip.*;   
  3.   
  4. public class test   
  5. {   
  6. public static void main(String[] args)   
  7. {   
  8. Data testData_=new Data();   
  9. //未压缩数据对象内容   
  10. System.out.println("name="+testData_.name+" age="+testData_.age+" height="+testData_.height);   
  11. //压缩   
  12. byte[] i_=compressObject.writeCompressObject(testData_);   
  13.   
  14. /*  
  15. 可执行保存或网络传输,需要时还原或在对端还原  
  16. */   
  17.   
  18. //解压缩   
  19. Data o_=compressObject.readCompressObject(i_);   
  20. //解压缩后对象内容   
  21. System.out.println("name="+o_.name+" age="+o_.age+" height="+o_.height);   
  22. }   
  23. }    

以上只是java下应用gzip压缩的一个简单例子,请大家举一反三在自己的开发中使用.由于本人水平所限,不当之处
HALCON实战:用两个工业相机实现无缝大视野拼接(附完整代码与避坑指南) 本文详细介绍了使用HALCON软件实现双工业相机图像无缝拼接的完整解决方案,涵盖硬件配置、相机标定、坐标系转换和图像拼接等关键步骤。通过高精度标定和矩阵变换技术,可构建大视野检测系统,适用于液晶面板、PCB等工业检测场景,显著提升检测效率和精度。 阅读详情

相关推荐

【实战技巧】matplotlib中文标签显示问题的3种高效解决方案

本文详细介绍了解决matplotlib中文标签显示问题的3种高效方法,包括修改字体设置、临时指定字体和修改后端配置。针对不同操作系统和环境提供了实用技巧,帮助开发者快速解决中文显示为方框的常见问题,提升数据可视化效果。

weixin_30855099的博客 171

GZIPInputStream的bug,还未到文件尾,read方法直接返回-1

关于GZIPInputStream的bug,在jdk的最新版本上竟然还没解决这个问题。用到gzip的需要注意了: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4691425 问题描述: 在使用GZIPInputStream对gizp文件进行读取的时候,使用read方法,方法返回-1,表示该文件读取真正的结束,但是实际却并不是这样。 ...

java开发指南博客 【转载】 522

TL494充电器原理与维修 (转)

TL494充电器原理与维修 电动自行车充电器多采用开关 电源,型号虽多,但电路结构大同小异,主要区别在于所选的脉宽调制(PWM)芯片不同如(UC3845、UC3842、SG3524、TL494)。现以佳腾牌 充电器为例,介绍其原理和故障检修方法。 一、电路原理 根据实物测绘的佳腾牌充电器电路原理如图1所示。整机可分为PWM产生和推动电路、功 率开关变换电路、...

weixin_30500663的博客 1815

Java进程 常规方法分析CPU和内存占用率很高的问题

在Java开发中,经常遇到CPU和内存占用率很高的情况,这个时候需要初步分析原因,先简单说一下经常使用的分析过程:先说一下CPU过高 (如:java进程id为:30420)    top -H -p 30420 命令得到 30420进程 占用CPU较高的线程id    再使用 printf "%x"n" 134126 把线程的id  转 16进制   jstack 134066| grep 20b...

qq_30599151的博客 1211

基于 Wi-Fi 的室内定位系统

目前,随着国内外相关从业人员的研究,研究者们提出了众多室内定位技术的理论与方法。在此仅讨论基于 Wi-Fi 的室内定位技术。 WI-FI室内定位 近年来Wi-Fi技术飞速发展,城市中的公共场所如大型超市商场、学校、企业等都已经广泛部署Wi-Fi。Wi-Fi室内定位技术已经出现了很多具有代表性的研究成果,如RADAR系统、Nibble系统、Weyes系统等室内定位系统。2012年,Google把Wi...

温染的笔记 9567

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:>> A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]>> r=rank(A)>> A1=...

weixin_35094083的博客 7389

java gzip 和zip 解压_Java实现文件压缩与解压的示例[zip格式,gzip格式]

Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例。zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩。Java I/O类库还收录了一些能读写压缩格式流的类。要想提供压缩功...

weixin_35172279的博客 564

告别wx.showActionSheet:微信小程序自定义底部弹框的5种实现方式对比

本文深入对比了微信小程序中替代原生wx.showActionSheet的五种自定义底部弹框实现方案。从基础视图层模拟到组件化封装,再到利用第三方UI库、CSS3动画及Page-Meta组件,详细分析了各方案的优缺点与适用场景,旨在帮助开发者根据项目需求,选择最合适的方案以实现高度定制化、交互丰富的弹框效果。

weixin_29005499的博客 191

【Java】文本数据的Gzip压缩

在Java中,可以使用Gzip压缩算法对数据进行压缩和解压缩。Gzip算法是一种常见的无损压缩算法,可以将数据压缩为较小的字节数,从而节省网络带宽和存储空间等资源。

微信公众号: 后端码匠 3084

深入探索 ClickHouse:性能优化之道

在大数据处理的广袤天地里,ClickHouse 宛如一颗璀璨的明星,以其卓越的性能为海量数据的存储与查询提供了强大助力。但要想让 ClickHouse 发挥出极致效能,性能优化至关重要。今天,就让我们一同深入探寻 ClickHouse 的性能优化之路。

arnold66的专栏 1548

引文:当SVM转角遇上Copy-on-Write (COW)

本文分析了Linux内核中fork系统调用的Copy-on-Write(COW)机制实现原理。重点阐述了fork时父子进程共享物理页面、标记页表项为只读并在写操作时触发COW的流程,以及在SVM环境中通过MMU Notifier机制保持CPU和GPU页表同步的解决方案。文章详细描述了COW的三个阶段:初始共享、写入触发和页面复制,并说明了MMU Notifier的回调注册和处理流程,确保异构计算环境下内存一致性。

图形/计算GPU的驱动与虚拟化技术分享园地 2674

java gzip filter_使用gzip优化web应用(filter实现)

相关知识:gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右...

weixin_34698121的博客 332

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2744

Java Web应用实现GZIP压缩传输

本篇介绍Java Web 应用如何配置GZIP压缩以提高js , css 等文件的传送速度, 加快网页的展现速度。

oscar999的专栏 1515

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java alder32,[java][io][ZIP]应用GZIP进行压缩和解压缩

[java][io][ZIP]使用GZIP进行压缩和解压缩Checksum 接口:被类Adler32和CRC32实现的接口Adler32 :使用Alder32算法来计算Checksum数目,快一些CRC32 :使用CRC32算法来计算Checksum数目,慢一些,但更准确CheckedInputStream :InputStream派生类,可得到输入流的校验和Checksum,用于校验数据的完整性...

weixin_42514002的博客 192

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

GZIP在Java中序列化类中的应用,文件压缩与解压

为什么80%的码农都做不了架构师?>>> ...

weixin_34208185的博客 330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于Gzip压缩

一、Gzip gzip是GNUzip的缩写,最早用于UNIX系统的文件压缩。HTTP协议上的gzip编码是一种用来改进web应用程序性能的技术,web服务器和客户端(浏览器)必须共同支持gzip。目前主流的浏览器,Chrome,firefox,IE等都支持该协议。常见的服务器如Apache,Nginx,IIS同样支持gzip。 gzip压缩比率在3到10倍左右,可以大大节省服务器的网络带宽。而在实...

Jermyo的博客 4129

filter结合gzip 解决web应用中网络传输数据量大的问题

过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中。...

星.云计算 96

Java压缩技术(四) GZIP——Java原生实现

趁着头脑清楚,抓紧时间继续整理!  熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令。  GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。  GZIPOutputStream类用于压缩  GZIPInputStream类用于解压缩 

430

GZip Servlet Filter

A GZip Servlet Filter can be used to GZip compress content sent to a browser from a Java web application. This text will explain how that works, and contains a GZip Servlet Filter you can use in your...

qtlkw 152

启用GZIP压缩优化网站

[b][color=red][size=x-large]来源别人的资料,仅用于作为个人笔记[/size][/color] [/b] GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。   ...

sunyliu007的博客 212

java zlib socket_gzip和zlib的关系

这两天做一个日志上报SDK,需要与logstash直接通讯。因为日志是批量上报的,很多类似于时间、应用名、日志级别的内容在每一行日志都会重复,所以我们协商采用gzip压缩,logstash自带插件支持。结果打开php.net官方手册,发现zlib库里有好几套压缩/解压缩函数,到底哪一套才能与java适配呢?其实还是对gzip体系了解不清楚的原因,所以打开维基百科gzip:zlib是DEFLATE算...

weixin_39980596的博客 196

java gzip rest,Resteasy通常启用GZIP

I have a RestEasy + Java EE application. When I add @GZIP to a component class, the server-answer is gzipped, if the client sends "accepts:gzip"Is there a way to generally enable gzip for all componen...

weixin_32019949的博客 162

JAVA——GZIP压缩与解压缩

基本概念 GZIP编码:GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功

无限迭代中...... 2952

使用GZIP压缩的方式向客户端传输响应数据

[code="java"]1, 工具类:测试客户端是否支持GZIP编码压缩方式 & 获得支持GZIP的PrintWriter对象 package freebsd; import java.io.IOException; import java.io.PrintWriter; import java.util.zip.GZIPOutputStream; import javax...

meiyx89的博客 655

Solon框架中Controller接口的GZIP压缩输出实现

Solon框架中Controller接口的GZIP压缩输出实现 【免费下载链接】solon ???? 面向全场景的 Java 企业级应用开发框架:克制、高效、开放、生态!并发高 700%;内存省 50%;启动快 10 倍;打包小 90%;同时兼容 java8 ~ java24。(对标“美国博通公司”(Broadcom)的 Sp...

gitblog_01402的博客 353
上一篇: java.io包详细解说
下一篇: JUnit之走马观花篇(转)
rq2
rq2
博客等级 码龄23年 1粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值