HTTP線上壓縮與解壓

2021-04-08 13:05:27 字數 3683 閱讀 7831

首先,應用icsharpcode.sharpziplib.dll,這是個開源軟體,網路上可以下到原始碼。

注意,這個開源軟體的084版本或以上提供乙個方法直接壓縮與解壓資料夾。方法很簡單,只要如下幾行程式碼就可以了:

private void button3_click(object sender, system.eventargs e)

但是,這樣做就喪失了靈活性,據實測,壓縮的檔案好像比自己寫要稍微大一些,估計是沒有辦法指定壓縮等級的原因;而且,我看了下原始碼,好像也沒有看到crc校驗。

要改進以上不足,我們可以自己寫兩個類,來分別完成壓縮與解壓,程式碼如下:

壓縮類:

using system;

using system.io;

using icsharpcode.sharpziplib.checksums;

using icsharpcode.sharpziplib.zip;

using icsharpcode.sharpziplib.gzip;

namespace iistest.compression

system.io.filestream streamtozip = new system.io.filestream(filetozip,system.io.filemode.open , system.io.fileaccess.read);

system.io.filestream zipfile = system.io.file.create(zipedfile);

zipoutputstream zipstream = new zipoutputstream(zipfile);

zipentry zipentry = new zipentry("zippedfile");

zipstream.putnextentry(zipentry);

zipstream.setlevel(compressionlevel);

byte buffer = new byte[blocksize];

system.int32 size =streamtozip.read(buffer,0,buffer.length);

zipstream.write(buffer,0,size);

try

} catch(system.exception ex)

zipstream.finish();

zipstream.close();

streamtozip.close();

}private string addzip( string filename, string zipname,zipoutputstream s)

catch( exception addex )

}private void addfolder(string foldername,string zipname,zipoutputstream s)}}

public void zipfilemain(string args)

zipoutputstream s = new zipoutputstream(file.create(args[1]));

s.setlevel(6); // 0 - store only to 9 - means best compression

addfolder(args[0],args[0].substring(args[0].length-1)=="//"?args[0].substring(0,args[0].length-1).substring(args[0].substring(0,args[0].length-1).lastindexof("//")+1):args[0].substring(args[0].lastindexof("//")+1),s);

s.finish();

s.close();}}

}解壓類:

using system;

using system.text;

using system.collections;

using system.io;

using system.diagnostics;

using system.runtime.serialization.formatters.binary;

using system.data;

using icsharpcode.sharpziplib.bzip2;

using icsharpcode.sharpziplib.zip;

using icsharpcode.sharpziplib.zip.compression;

using icsharpcode.sharpziplib.zip.compression.streams;

using icsharpcode.sharpziplib.gzip;

namespace iistest.decompression

this.targetdirectory = args[1].tostring();

zipentry entry;

while ( (entry = s.getnextentry()) != null )

}finally

}private void extractentry(zipentry entry)

else

targetname = path.combine(targetdirectory, entryfilename);

dirname = path.getdirectoryname(path.getfullpath(targetname));

doextraction = doextraction && (entryfilename.length > 0);

}if ( doextraction && !directory.exists(dirname) )

catch }}

if ( doextraction && entry.isfile )

}private void extractfileentry(zipentry entry, string targetname)

int size;

do while (size > 0);

}finally

file.setlastwritetime(targetname, entry.datetime);}}

private void unzipfolder(string zipname,zipinputstream s)

else}}

private void unzipfile(string zipname,zipinputstream s)

else

}streamwriter.close();}}

}完成後,呼叫的過程如下:

private void button1_click(object sender, system.eventargs e)

private void button2_click(object sender, system.eventargs e)

這樣的靈活性就大多了,可以自己指定壓縮的等級等屬性。

上面我們引用的哪個dll全部是用c#寫成的,採用的壓縮方法好像是huffman編碼【沒怎麼詳細看】,只能壓縮成zip格式,中等壓縮和winrar壓縮成zip格式的檔案大小完全相等,壓縮速度比winrar壓縮成rar格式要快很多。壓縮後的zip檔案可以被rar解壓。

唯一的缺點就是不能壓縮成rar格式,當然了,也不能解壓rar檔案。

壓縮與解壓

linux下怎麼解字尾名是gzip的檔案?1.以.a為副檔名的檔案 tar xv file.a 2.以.z為副檔名的檔案 uncompress file.z 3.以.gz為副檔名的檔案 gunzip file.gz 4.以.bz2為副檔名的檔案 bunzip2 file.bz2 5.以.tar.z為...

壓縮與解壓

一 python壓縮解壓libs zlib infozip免費的壓縮lib。bzip2 讀寫bz壓縮檔案,與bzip2和bunzip2壓縮程式相容。gzip 讀寫gz壓縮檔案,與gnu壓縮程式gzip和gunzip相容。zipfile 讀寫zip壓縮檔案,與zip,unzip,pkzip,pkunz...

壓縮與解壓

1.基礎壓縮指令 gzip file 壓縮對應檔案,原始檔移除,如果是多個檔案壓縮,則被分別壓縮,不會打包。壓縮後檔名file.gz gunzip file.gz 解壓file.gz,壓縮包移除。bzip2 file k 同gzip,但是壓縮後的檔名file.bz2,k表示原始檔保留 bunzip2...