溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java和.NET的GZIP壓縮功能實(shí)例分析

發(fā)布時(shí)間:2022-01-06 21:00:12 來(lái)源:億速云 閱讀:198 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“Java和.NET的GZIP壓縮功能實(shí)例分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

代碼解析

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)壓縮文件:

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);     }    }  }

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

Java和.NET的GZIP壓縮功能實(shí)例分析

現(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)壓縮文件:

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);         } }

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

Java和.NET的GZIP壓縮功能實(shí)例分析

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

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

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

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

“Java和.NET的GZIP壓縮功能實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI