本文主要比较了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字节,压缩文件大小为:

  1. .NET的GzipStream:353字节
  2. Java的GZIPOutputStream :207字节

压缩后的尺寸大小差距很明显。因此,我们可以得出结论,Java的GZIP压缩比.NET更好。

兴趣点

我是在使用IKVM.NET研究Java和.NET之间的互操作性时发现的。我认为这很有意思,所以分享给大家。

Java和.NET的GZIP压缩功能对比的更多相关文章

  1. Nginx -- Gzip 压缩功能作用

    1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...

  2. 开启Nginx的gzip压缩功能详解

    默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行 ...

  3. Nginx开启gzip压缩功能

    在Nginx安装完成之后,我们可以开启Gzip压缩功能,这里Nginx默认只能对text/html类型的文件进行压缩.下面的指令为开启Gzip的指令: gzip on; gzip_http_versi ...

  4. PhpStudy如何开启Apache的gzip压缩功能?

    要让apache支持gzip功能,要用到deflate_Module和headers_Module. 打开apache的配置文件httpd.conf,大约在105行左右,找到以下两行内容:(这两行不是 ...

  5. nginx的gzip压缩功能

    我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...

  6. http gzip压缩功能记录

    版权声明:本文为博主原创文章,转载请附上原文出处链接. 本文链接:https://www.cnblogs.com/shaoshuai95928/articles/Tomcat.html 最近在spri ...

  7. Tomcat6启用Gzip压缩功能

    配置Tomcat根目录下/conf/server.xml文件: <Connector port="8080" protocol="HTTP/1.1" co ...

  8. php判断服务器是否支持Gzip压缩功能

    Gzip可以压缩网页大小从而达到加速打开网页的速度,目前主流的浏览器几乎都支持这个功能,但开启Gzip是需要服务器支持的,在这里我们简单的使用php来判断服务器是否支持Gzip功能. 新建一个php类 ...

  9. Apache httpd 2.4.27开启GZIP压缩功能

    转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1373 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的文件压缩算法,现在的应 ...

随机推荐

  1. 【toplink】 位居第一的Java对象关系可持续性体系结构

    TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...

  2. 我的PHP之旅--PHP的判断、循环语句

    if语句 <?php if ($a = "some string") { // 就算括号中不是bool值,php也会自动转换为bool值 上一节写过各个类型转换bool值 / ...

  3. 异步IO模型和Overlapped结构

    .NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERL ...

  4. 百度地图API使用介绍

    百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head& ...

  5. FZU 2150 Fire Game(BFS)

    点我看题目 题意 :就是有两个熊孩子要把一个正方形上的草都给烧掉,他俩同时放火烧,烧第一块的时候是不花时间的,每一块着火的都可以在下一秒烧向上下左右四块#代表草地,.代表着不能烧的.问你最少花多少时间 ...

  6. SQL按日期Datatime来比较大小

    数据库操作中,通常需要选择某日期以后的记录,比如选择10年1月到11年2月之间的记录,此时用SQL语句编写时,不能直接用">.<.="来选择,因为datetime型数据 ...

  7. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍

    一. 1.SpEL expressions are framed with  #{ ... } 2.SpEl的作用 Sp EL has a lot of tricks up its sleeves, ...

  8. 让QT编译快一点(增加基础头文件)

    姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...

  9. S3C2410 实验三——跑马灯实验

    http://www.evernote.com/shard/s307/sh/f2a748e7-34c4-4ce6-acac-82a756cc9e82/ad5813188d655e504857970db ...

  10. NuGet学习笔记(1)——初识NuGet及快速安装使用

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...