Java和.NET的GZIP压缩功能对比
本文主要比较了Java和.NET提供的GZIP压缩功能。
介绍
在本文中,我们将讨论Java和.NET提供的GZIP压缩功能,并且用实例来说明哪个压缩方法更佳。
在Java中,我们有提供GZIP压缩的GZIPOutputStream类,这个类在Java.util.zip包中。而在.NET中,我们有执行GZIP压缩的GZipStream类,这个类在System.IO.Compression命名空间下。
我这里所说的更好方法针对的是小尺寸文件,因为我已经检验过小文件的效果,比如说当我们想在发送之前压缩我们的信息文件。
代码解析
1)Java GZIPOutputStream类
该GZIPOutputStream类为压缩数据在GZIP格式文件中创建了输入流。这个类有以下几种的构造函数:
1.创建具有默认大小的输出流:
GZIPOutputStream(OutputStream out);
2.创建新的具有默认缓冲区大小和指定刷新模式的输出流:
GZIPOutputStream(OutputStream out,boolean syncFlush);
3.创建新的具有指定缓冲区大小的输出流:
GZIPOutputStream(OutputStream out,int size);
4.创建新的具有指定的缓冲区大小和刷新模式的输出流:
GZIPOutputStream(OutputStream out,int size,boolean syncFlush);
我们需要编写以下代码来压缩文件:
import java.io.*; import java.util.zip.*; class abc{ public static void main(String args[]) { String srcfile="D:/abhi.txt"; String dstfile="D:/abhi1.txt"; try{ FileInputStream fin= new FileInputStream(srcfile); GZIPOutputStream fout=new GZIPOutputStream(new FileOutputStream(dstfile)); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fin.read(buffer)) != -1) //srcfile.getBytes() { fout.write(buffer, 0, bytesRead); } fin.close(); fout.close(); File file =new File(srcfile); System.out.println("Before Compression file Size : " + file.length()+" Bytes"); File file1 =new File(dstfile); System.out.println("After Compression file Size : " + file1.length()+" Bytes"); }catch(Exception ex) { System.out.println(ex); } } }
运行代码。输出如下,因为我提供的源文件只有481个字节大小,然后经过压缩后输出的文件大小为207个字节。
现在,我们用相同的输入文件来看看GZIP压缩后的效果。
2).NET GZipStream类
GZipStream压缩string或文件。它可以让你有效地保存数据,如压缩日志文件,消息文件。这个类存在于System.IO.Compression的命名空间。它创建GZIP文件,并将其写入磁盘。
GZipStream类提供以下构造函数:
1.通过使用指定字节流和压缩等级初始化GZipStream类的新实例:
GZipStream(Stream, CompressionLevel)
2.通过使用指定流和压缩模式初始化GZipStream类的新实例:
GZipStream(Stream, CompressionMode)
3.通过使用指定流和压缩等级初始化GZipStream类的新实例,并可选是否打开流:
GZipStream(Stream, CompressionLevel, Boolean)
4.通过使用指定流和压缩模式初始化GZipStream类的新实例,并可选是否打开流:
GZipStream(Stream, CompressionMode, Boolean)
我们需要编写以下代码来压缩文件:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.IO.Compression; namespace Compress { class Program { static void Main(string[] args) { string srcfile = "D:\\abhi.txt"; string dstfile = "D:\\abhi2.txt"; byte[] b; using (FileStream f = new FileStream(srcfile, FileMode.Open)) { b = new byte[f.Length]; f.Read(b, 0, (int)f.Length); } using (FileStream fs = new FileStream(dstfile, FileMode.Create)) using (GZipStream gzip = new GZipStream(fs, CompressionMode.Compress, false)) { gzip.Write(b, 0, b.Length); } FileInfo f2 = new FileInfo(srcfile); System.Console.WriteLine("Size Of File Before Compression :"+f2.Length); FileInfo f1 = new FileInfo(dstfile); System.Console.WriteLine("Size Of File Before Compression :" + f1.Length); } }
运行代码。输出如下,由于我提供的是481字节大小的源文件,然后压缩后的输出文件大小为353个字节。
大家可以看到,源文件为481字节,压缩文件大小为:
- .NET的GzipStream:353字节
- Java的GZIPOutputStream :207字节
压缩后的尺寸大小差距很明显。因此,我们可以得出结论,Java的GZIP压缩比.NET更好。
兴趣点
我是在使用IKVM.NET研究Java和.NET之间的互操作性时发现的。我认为这很有意思,所以分享给大家。
Java和.NET的GZIP压缩功能对比的更多相关文章
- Nginx -- Gzip 压缩功能作用
1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...
- 开启Nginx的gzip压缩功能详解
默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行 ...
- Nginx开启gzip压缩功能
在Nginx安装完成之后,我们可以开启Gzip压缩功能,这里Nginx默认只能对text/html类型的文件进行压缩.下面的指令为开启Gzip的指令: gzip on; gzip_http_versi ...
- PhpStudy如何开启Apache的gzip压缩功能?
要让apache支持gzip功能,要用到deflate_Module和headers_Module. 打开apache的配置文件httpd.conf,大约在105行左右,找到以下两行内容:(这两行不是 ...
- nginx的gzip压缩功能
我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...
- http gzip压缩功能记录
版权声明:本文为博主原创文章,转载请附上原文出处链接. 本文链接:https://www.cnblogs.com/shaoshuai95928/articles/Tomcat.html 最近在spri ...
- Tomcat6启用Gzip压缩功能
配置Tomcat根目录下/conf/server.xml文件: <Connector port="8080" protocol="HTTP/1.1" co ...
- php判断服务器是否支持Gzip压缩功能
Gzip可以压缩网页大小从而达到加速打开网页的速度,目前主流的浏览器几乎都支持这个功能,但开启Gzip是需要服务器支持的,在这里我们简单的使用php来判断服务器是否支持Gzip功能. 新建一个php类 ...
- Apache httpd 2.4.27开启GZIP压缩功能
转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1373 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的文件压缩算法,现在的应 ...
随机推荐
- 我的第一个BAE python应用
第一步 用baidu帐号登陆开发者中心 http://developer.baidu.com/ Baidu的引导,帮助说明已经很详细, 这里不重复. 第二步,创建新版本 用svn check out ...
- cocos2dx 3.4 截图代码
Size size = Director::sharedDirector()->getWinSize(); //定义一个屏幕大小的渲染纹理 RenderTexture* pScreen = Re ...
- UIWebView与JS的深度交互-b
要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > ...
- 服务器环境搭建系列(一)-Apache篇
一.Apache 1.解压缩tar包httpd-2.2.22.tar.gz,这里默认放在/opt下 tar -zxvf httpd-2.2.22.tar.gz 2.进入解压缩后的文件夹 cd http ...
- WebKit Web Inspector增加覆盖率分析和类型推断功能
WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...
- gcc和g++的区别
参考What is the difference between g++ and gcc? 1.The actual compiler is "cc1" for C and &qu ...
- 移动开发:初学 iOS-UIViewController 心得
初学 iOS,本文翻译了一些 iOS 官网上的 UIViewController 的知识点,如有不到位或不正确的地方,还请指正: 本文所介绍的内容的目标: 理解content view control ...
- UPUPW PHP环境集成包
UPUPW PHP环境集成包 http://www.upupw.net/
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- POJ1177+线段树+扫描线
思路: 以y的值进行离散化 根据x的值 对每一条y轴边进行处理,如果是"左边"则插入,是"右边"则删除. /* 扫描线+线段树+离散化 求多个矩形的周长 */ ...