C#和Java的文件压缩。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#和Java的文件压缩。相关的知识,希望对你有一定的参考价值。

我用Java写了个程序压缩文件,由于找到的包不支持生成rar格式的压缩文件,最后用程序调用WinRaR的Rar.exe完成了程序。 发现压缩一个80M的文件,需要40秒。
同事的C#的程序用了ICSharpCode.SharpZipLib.dll。 发现压缩一个80M的文件,需要20秒。
问题:Java的比C#慢没什么疑问,但奇怪的是我用WinRAR压缩一个80M的文件也是接近40秒,C#的程序怎么会比WinRAR快(注意是rar格式)?
还有ICSharpCode.SharpZipLib.dll,不是不支持rar格式吗什么时候可以了,我记得rar格式的压缩算法还没公开?

zip和rar用的不同的压缩算法,
zip的比较简单,计算复杂度低,压缩比也低。zip的deflate算法公开,经过几十年优化已被总结出很快的实现。内存最小可以只要32K
rar是私有格式,压缩比较高,内存也需要典型的4MB。
刚出来时,rar针对32位386设计的,硬件要求比zip高一个数量级。
另外在进程调用子进程,系统IO开销,和对子进程分配的较小的执行优先级。都可能导致速度慢。追问

还有ICSharpCode.SharpZipLib.dll,不是不支持rar格式吗什么时候可以了,我记得rar格式的压缩算法还没公开?

追答

SharpZipLib 并不支持rar。
支持, gzip, zlib and raw deflate, as well as BZip2

你用SharpZipLib生成rar,很可能是tar误认,或者zip冒充的rar文件。

参考技术A java只支持zip,tar等跨平台的压缩格式 。。rar是window的。

以上是关于C#和Java的文件压缩。的主要内容,如果未能解决你的问题,请参考以下文章

C#工具类:使用SharpZipLib进行压缩解压文件

C#工具类:使用SharpZipLib进行压缩解压文件

C#中如何通过ZipFile类操作ZIP文件(压缩、解压)

C# 文件压缩加解密

C#调用Ionic.Zip类压缩文件夹

是否可以在 C# 中将文件夹压缩在一起?