自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java和.NET的GZIP壓縮功能對(duì)比

開(kāi)發(fā) 后端
我是在使用IKVM.NET研究Java和.NET之間的互操作性時(shí)發(fā)現(xiàn)的。我認(rèn)為這很有意思,所以分享給大家。

本文主要比較了Java和.NET提供的GZIP壓縮功能。

介紹

在本文中,我們將討論Java和.NET提供的GZIP壓縮功能,并且用實(shí)例來(lái)說(shuō)明哪個(gè)壓縮方法更佳。

在Java中,我們有提供GZIP壓縮的GZIPOutputStream類,這個(gè)類在Java.util.zip包中。而在.NET中,我們有執(zhí)行GZIP壓縮的GZipStream類,這個(gè)類在System.IO.Compression命名空間下。

我這里所說(shuō)的更好方法針對(duì)的是小尺寸文件,因?yàn)槲乙呀?jīng)檢驗(yàn)過(guò)小文件的效果,比如說(shuō)當(dāng)我們想在發(fā)送之前壓縮我們的信息文件。

代碼解析

1)Java GZIPOutputStream類

該GZIPOutputStream類為壓縮數(shù)據(jù)在GZIP格式文件中創(chuàng)建了輸入流。這個(gè)類有以下幾種的構(gòu)造函數(shù):

1.創(chuàng)建具有默認(rèn)大小的輸出流:

GZIPOutputStream(OutputStream out);

2.創(chuàng)建新的具有默認(rèn)緩沖區(qū)大小和指定刷新模式的輸出流:

GZIPOutputStream(OutputStream out,boolean syncFlush);

3.創(chuàng)建新的具有指定緩沖區(qū)大小的輸出流:

GZIPOutputStream(OutputStream out,int size);

4.創(chuàng)建新的具有指定的緩沖區(qū)大小和刷新模式的輸出流:

GZIPOutputStream(OutputStream out,int size,boolean syncFlush);

我們需要編寫以下代碼來(lái)壓縮文件:

 

  1. import java.io.*; 
  2. import java.util.zip.*; 
  3.  
  4. class abc{ 
  5.  
  6. public static void main(String args[]) 
  7.   { 
  8.    String srcfile="D:/abhi.txt"
  9.          String dstfile="D:/abhi1.txt"
  10.  
  11.   try
  12.  
  13.    FileInputStream fin= new FileInputStream(srcfile); 
  14.        GZIPOutputStream fout=new GZIPOutputStream(new FileOutputStream(dstfile)); 
  15.  
  16.              byte[] buffer = new byte[1024]; 
  17.              int bytesRead; 
  18.  
  19.              while ((bytesRead = fin.read(buffer)) != -1//srcfile.getBytes() 
  20.              { 
  21.                fout.write(buffer, 0, bytesRead); 
  22.              } 
  23.  
  24.                fin.close(); 
  25.                   fout.close(); 
  26.  
  27.                      File file =new File(srcfile); 
  28.                    System.out.println("Before Compression file Size : 
  29.                     " + file.length()+" Bytes"); 
  30.                      File file1 =new File(dstfile); 
  31.                      System.out.println("After Compression file Size : 
  32.                       " + file1.length()+" Bytes"); 
  33.  
  34.   }catch(Exception ex) 
  35.     { 
  36.   System.out.println(ex); 
  37.     } 
  38.    } 
  39.  

運(yùn)行代碼。輸出如下,因?yàn)槲姨峁┑脑次募挥?81個(gè)字節(jié)大小,然后經(jīng)過(guò)壓縮后輸出的文件大小為207個(gè)字節(jié)。

現(xiàn)在,我們用相同的輸入文件來(lái)看看GZIP壓縮后的效果。

2).NET GZipStream類

GZipStream壓縮string或文件。它可以讓你有效地保存數(shù)據(jù),如壓縮日志文件,消息文件。這個(gè)類存在于System.IO.Compression的命名空間。它創(chuàng)建GZIP文件,并將其寫入磁盤。

GZipStream類提供以下構(gòu)造函數(shù):

1.通過(guò)使用指定字節(jié)流和壓縮等級(jí)初始化GZipStream類的新實(shí)例:

GZipStream(Stream, CompressionLevel)

2.通過(guò)使用指定流和壓縮模式初始化GZipStream類的新實(shí)例:

GZipStream(Stream, CompressionMode)

3.通過(guò)使用指定流和壓縮等級(jí)初始化GZipStream類的新實(shí)例,并可選是否打開(kāi)流:

GZipStream(Stream, CompressionLevel, Boolean)

4.通過(guò)使用指定流和壓縮模式初始化GZipStream類的新實(shí)例,并可選是否打開(kāi)流:

GZipStream(Stream, CompressionMode, Boolean)

我們需要編寫以下代碼來(lái)壓縮文件:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.IO; 
  6. using System.IO.Compression; 
  7.  
  8. namespace Compress 
  9.     class Program 
  10.     { 
  11.         static void Main(string[] args) 
  12.         { 
  13.             string srcfile = "D:\\abhi.txt"
  14.             string dstfile = "D:\\abhi2.txt"
  15.  
  16.             byte[] b; 
  17.  
  18.             using (FileStream f = new FileStream(srcfile, FileMode.Open)) 
  19.             { 
  20.                 b = new byte[f.Length]; 
  21.                 f.Read(b, 0, (int)f.Length); 
  22.             } 
  23.  
  24.             using (FileStream fs = new FileStream(dstfile, FileMode.Create)) 
  25.  
  26.             using (GZipStream gzip = new GZipStream(fs, CompressionMode.Compress, false)) 
  27.             { 
  28.                 gzip.Write(b, 0, b.Length); 
  29.             } 
  30.  
  31.             FileInfo f2 = new FileInfo(srcfile); 
  32.             System.Console.WriteLine("Size Of File Before Compression :"+f2.Length); 
  33.  
  34.             FileInfo f1 = new FileInfo(dstfile); 
  35.             System.Console.WriteLine("Size Of File Before Compression :" + f1.Length); 
  36.         } 

運(yùn)行代碼。輸出如下,由于我提供的是481字節(jié)大小的源文件,然后壓縮后的輸出文件大小為353個(gè)字節(jié)。

大家可以看到,源文件為481字節(jié),壓縮文件大小為:

  1.  .NET的GzipStream:353字節(jié)

  2. Java的GZIPOutputStream :207字節(jié)

壓縮后的尺寸大小差距很明顯。因此,我們可以得出結(jié)論,Java的GZIP壓縮比.NET更好。

興趣點(diǎn)

我是在使用IKVM.NET研究Java和.NET之間的互操作性時(shí)發(fā)現(xiàn)的。我認(rèn)為這很有意思,所以分享給大家。

責(zé)任編輯:王雪燕 來(lái)源: 碼農(nóng)網(wǎng)
相關(guān)推薦

2010-07-19 09:01:54

.NET 4.0緩存

2011-03-29 13:56:12

SQL Server 數(shù)據(jù)壓縮

2011-08-10 17:38:56

Windows7自帶的WinZip

2011-10-09 11:41:22

OracleZFSPillar Axio

2013-07-05 09:28:21

軟路由路由技術(shù)

2009-11-06 17:10:34

ChromeFirefox功能對(duì)比

2010-09-14 13:10:36

2010-02-03 15:11:53

C++內(nèi)存區(qū)域

2025-02-14 10:16:15

2013-03-22 13:31:52

App制作工具非編程

2009-03-16 12:10:02

Windows 7微軟對(duì)比

2023-09-14 22:57:52

2010-04-26 13:48:17

iPhone OSiOSWindows Pho

2017-06-06 09:56:03

hypervisor成本功能

2010-01-22 11:06:03

GNUkFreeBSDLinux

2010-03-09 19:39:37

python程序調(diào)試

2019-10-29 09:14:52

ETL架構(gòu)DataPipelin

2015-04-13 10:54:42

java.netHashSet

2022-01-10 09:33:59

Firefox 95Chrome 97 Linux

2013-11-08 10:59:17

Hadoop虛擬化VMware vSph
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)