日期:2014-05-19  浏览次数:21477 次

C#压缩文件反而变大?
用C#2.0中的两个压缩类压缩文件,文件反而变大
原文件大小   :   14M     格式exe
GZipStream压缩后:22M
DeflateStream压缩后:22M
rar压缩后:14.4M

但是DeflateStream和GZipStream压缩txt文件和doc文件一般会变小

------解决方案--------------------
楼上的,你说的大家都知道,但是也不能14M 变成 22M吧?

WinRar也不过是略微的有所变化,它压缩exe一般都是14M变成13M左右而已。
------解决方案--------------------
WinRar压缩.net的程序,压缩比甚至在1/3左右,所以真的如搂住所说,就确实不正常了。

建议试验用Winrar压缩后进行比较大小
------解决方案--------------------
没什么不正常的,算法不一样,结果也就不一样了
------解决方案--------------------
GZipStream
DeflateStream 有点基于base64的加密 变大很正常
------解决方案--------------------
算法不一样,很正常~
------解决方案--------------------
算法不一样,然后压缩1M变2M?还正常?

那我只能说楼上的加起来5个星星的帅哥思路不太正常
------解决方案--------------------
可以使用uharc看一看
------解决方案--------------------
具体算法我没研究过,但我知道压缩的大概原理
只有存在大量重复信息的数据文件才有可能被压缩
给你举个通俗的例子
比如某片区域是00000000000000000000,可以用 "20个0 "来替换
长度缩短了;
但如果是00,用 "2个0 "来替换反而会变长
Exe文件本身存放的是可执行指令,他的0与1很少有大量重复
加上压缩算法附加的标志信息,当然会变大
rar变大的比较小,是因为他是一个成熟的软件,经过很多年发展、改进了
考虑得比较周到~


------解决方案--------------------
zip格式的确压缩率不高
没有rar, ace, 7z来得高
------解决方案--------------------
soaringbird,不要混淆概念——你能说1岁和2岁的孩子差一倍的年龄??

普通0字节和100字节,不能算100倍吧?

但是如果10M压缩成了20M——我只是说这种压缩比说不过去,知道么?假如变成12、14也只是说它没有压缩成功,略微增大了,但是也不能弄个10 To 20吧?

基数不同的时候——是不一样的。
------解决方案--------------------
//-----一个算法动不动就把文件压缩成以前的两倍,我还真没觉得这个算法有什么利用价值
什么叫动不动?
难道rar压缩的1.x倍就有价值?我不知道有何价值请解释!

问题的根源在于你就不该企图去压缩一个Exe文件!
------解决方案--------------------
上面我说的那个例子只是一个极端的例子而已。
压缩算法有优有劣、有高效有低效,在有什么文件都能压缩的算法之前,只能根据实际情况使用了
------解决方案--------------------
赞同viena(维也纳N02) 的说法,如果楼主真的有时间可以研究rar的算法公式,然后再根据你自己文件中0、1的分布手工算一次,这样就会很清楚了。压缩后变大很正常,至于变大了多少需要参考文件的结构。
------解决方案--------------------
//问题的根源在于你就不该企图去压缩一个Exe文件!

难道你保证所有的“用户”都和你一样精通“算法”?把2个以上的exe压缩,并不是仅仅是为了体积的缩小吧??——而是为了发送和传递便捷。

而且不是因为我们写不出来高效而又压缩比高的算法就没有权利质疑它的问题吧?敢问,你不会下蛋,就不可以批评某种鸡蛋不好吃??这是什么逻辑阿??

现在大家探讨的是,能把10M压缩成20M的算法的合理性。——难道算法有问题,大家因为自己不能写算法,就要睁一眼闭一眼??所以站着说话不腰疼的肯定不是有反对意见的人。

============================================================================
viena——大家都是探讨技术,希望不要生气,就是就事论事而已。能得到三个星星说明你很能帮助别人,也希望你有和技术一样宽广的胸怀。



------解决方案--------------------
另,你就不担心某一天有一个母鸡对你说——嘿,你还别嫌我的鸡蛋有苏丹红,也别嫌小,有本事嫩也下一个我看看!!~
------解决方案--------------------
弄个exe减肥的工具试试吧

基于字典的压缩算法,需要将字典数据放在压缩文件中,某些情况下会变大,并不奇怪