用C#2.0中的两个压缩类压缩文件,文件反而变大
原文件大小 : 14M 格式exe
GZipStream压缩后:22M
DeflateStream压缩后:22M
rar压缩后:14.4M但是DeflateStream和GZipStream压缩txt文件和doc文件一般会变小
原文件大小 : 14M 格式exe
GZipStream压缩后:22M
DeflateStream压缩后:22M
rar压缩后:14.4M但是DeflateStream和GZipStream压缩txt文件和doc文件一般会变小
DeflateStream 有点基于base64的加密 变大很正常
只有存在大量重复信息的数据文件才有可能被压缩
给你举个通俗的例子
比如某片区域是00000000000000000000,可以用"20个0"来替换
长度缩短了;
但如果是00,用"2个0"来替换反而会变长
Exe文件本身存放的是可执行指令,他的0与1很少有大量重复
加上压缩算法附加的标志信息,当然会变大
rar变大的比较小,是因为他是一个成熟的软件,经过很多年发展、改进了
考虑得比较周到~
没有rar, ace, 7z来得高
------你这属于胡搅蛮缠,谁吃多了去压缩一个字节的文件??你不知道winrar文件的文件头就有近一百个字节??把文件头一去掉,真正经过压缩的数据不会变大。
什么叫动不动?
难道rar压缩的1.x倍就有价值?我不知道有何价值请解释!问题的根源在于你就不该企图去压缩一个Exe文件!
viena——大家都是探讨技术,希望不要生气,就是就事论事而已。能得到三个星星说明你很能帮助别人,也希望你有和技术一样宽广的胸怀。
那你需要的是文件连接与拆分,而不是压缩,根本不用什么算法
开辟缓冲区读写就可以了
换句话说,你是下蛋的,而不是吃蛋的rar是一个成熟的软件,它是给用户用的
而你的程序中用到的算法或者代码,是另外一回事
任何算法都是半成品而非一个软件,都只能解决某一方面的问题
如果你觉得你选的算法不适合你用,你可以换一个,或者自己写一个
完全没必要在这里唧唧歪歪那两个确实比rar差,但又怎么样呢?
你为什么不拿你写的软件与顶级高手写的同类软件去对比呢?
因为你知道这种对比没有意义~
你说的对,但是你忘记了一点,你的软件是给用户用的,不是给自己用的
而且你确实是下蛋的,不是吃蛋的,只是你下蛋的方法——是现成的算法。
但是你不是最终用户,最终用户是不懂算法优劣的,他只是知道你的算法
让他的文件从10M变成了20M,你却有口难辩,你总不能对他们说
算了,别用我的压缩了,用Rar吧,他比我成熟
我的软件是给用户用的,但是我会用适合我的算法,
如果实在没有,或者写不出来,我会转换思路,试试别的途径,
而不是非要异想天开的非要强求某个算法能达到rar的水平,
如果你能做到,你完全可以用.NET写一个rar出来了
两个字,可笑~
我没有“强求某个算法能达到rar的水平”,你的明白??
我只是对一个压缩算法把10M弄成20M表示质疑而已,你的明白??真的明白??
我看你没明白!!——我根本没用到这个算法,看清楚了我不是楼主。质疑 :
zhì yí
对某件事情或事物表示怀疑 不知所谓,还可笑!!为了争辩而争辩来体现自己的能力??有意义么?suliang1984
大家不是一个层面上的,没有讨论的必要。
怎么叫适合自己的算法??——白痴都知道,10M压缩成了20M的算法不能用。还愣要给别人扣帽子...
但你也看清楚了,楼主说的并不是10M弄成20M
但我认为你的质疑是没有必要的我是冲zhouhongyun(最终幻想)的那句话
而不是你的质疑
相反我倒认为是你在纠缠不休
而且试图压缩exe文件本身就不应该
你的质疑没有意义
GZipStream压缩后:22M
DeflateStream压缩后:22M有所差别?呵呵,算了,NND,咱两个吵啥啊~~一点意义都没有
不说了,呵呵,再说大家都不用吃晚饭了。
13249544——>压缩后13299704,确实大了100多个字节,但是去掉Rar必然的文件头,
似乎没有变大。
——首先说我思维没有逻辑
//如果你能做到,你完全可以用.NET写一个rar出来了
——其次,鄙视我的能力,虽然我确实写不出来,相信你也写不出来,大家半斤八两,虽然你三个星星。
两个字,可笑~
——嘲笑这件事情的可笑,一个巴掌拍不响,可笑也是你我两个人阿
不是所有的EXE都不可以压缩吧?
一般来说编译出来的EXE都是可以被压缩地:)至于原因还用说么?
*/
那可不一定,具体要看EXE的内容了,如果它本身包含数据,比如资源文件
就与纯EXE文件不一样,
如果EXE文件内部不包含任何数据的话(完全无序)
压缩结果必然是增大无疑的
你理解错了,我的意思是你不该去压缩一个exe文件,是这种做法不应该而不是这个算法没用
压缩结果必然是增大无疑的
------你用winrar压缩一个EXE文件看看,看怎么个增大无疑法
=================================
=================================
=================================
拜托,大部分的exe是可以被压缩的!
=================================
=================================
=================================
=================================
但是你不能否认,压缩后变大是可能的
如果压缩的结果可能是变大,这种压缩还有意义吗?
你用VC Delphi VB 等等等等任何可以生成本地代码的编译个Exe再压缩看看
------你完全可以自己试一下再发言,我已经试了很多VC编译的EXE,还真吓了一跳,平均压缩比达到1/3
我说的是rar,既然用rar(或者你找一个比rar强的试试)压缩exe都没有意义,
结论是压缩exe没有意义,
那么文件是否变大两倍或更多倍又怎样呢?
有意义吗?
=================================
=================================
=================================
拜托,除了VC的我没有实验!我这里没有VC
其他的exe是可以被压缩的!而且VB的最高,基本上都是1/3的压缩比
你能不能试验之后再和我说啊。
不能压缩的大多数都是安装程序——也就是本身都压缩过的那种exe
=================================
=================================
=================================
=================================
已经不少了,1M的剩下300k,你还能说exe不可以被压缩么??
但是我也不是无懈可击,因为我没有验证他说的2倍压缩比的算法。——但是庆幸的是
我质疑的只是“如果”这个比例存在,那么这个算法的可行性而已。
建一个空项目编译的话似乎不具有代表性~
我崩溃,打死我都不信,你操作系统里面会只有.net的exe?你计算机除了开发工具还有没有应用软件??——不要给自己的懒惰找理由。//建一个空项目编译的话似乎不具有代表性~
我压缩的没有一个是空项目编译的——我这里碰巧有好多种语言编辑的应用程序,所以就一并试验了。基本上保证1/3的压缩比(安装类的程序除外),这点你不用置疑,你可以去试验,或者我可以截图给你,我绝对不会为了拍你而造假,那就真的违背了探讨技术的初衷了。我也希望自己找到个例,可惜,没有找到。//大量的试验能说明什么呢?你穷尽了所有的可能情况了吗?
你不觉得自己太过强词夺理么??我做了大量的试验去验证,你什么都不作还让我们去穷尽这个。我总不能吃过所有的鸡蛋才敢说鸡蛋带壳吧??你说得话让我想起一个笑话
就是那个把所有火柴都划着了,然后告诉妈妈,所有的都好用的孩子。
========================================================
不要总咬着什么什么硬犟,给个麻花都不干啊——你总要拿出证据啊??
你一个证据都没有,然后就说我们的论证不够多,是不是有些霸道呢?
有些时候,不是星星多就可以了啊~~~~~~~惹火了,明天我去弄个太阳。
========================================================
我们都有同样的爱好——争论,也就是所谓的拍砖。黔驴技穷也是开玩笑的,扯不上什么人身攻击啊。真是的,你要觉得我说得过分了,那为了这个驴俺向嫩道歉——但是争论并不会认输。
不过在我的印象里,exe是没法压缩的,是dos时代打下的烙印但是要注意,我承认这句话说错了,不等于认同你们的说法~
我说的exe是指只包含指令而不包含任何数据的理想情况~
.net的gzipstream采用的子算法更是差劲。
在.Net上可以用的压缩库还有SharpZipLib,支持多种压缩算法(没有rar),比VS自带的效果要好些,但还是比不上rar。
//Windows程序,动辄几百K,甚至上M,里面不可能全部是计算机指令
//我说的exe是指只包含指令而不包含任何数据的理想情况~我也是从Dos走过来的,你说得我理解,但是即便是最底层的C写出来的,直接进行汇编的。也不可能只包含指令而不包含任何数据的,它编译后的体积一般是直接汇编的2倍,多出来的,怎么可能全是指令??难道它没事自己堆栈玩儿么?再退1万步讲,就是当年的MSC51的汇编,基本上你要做一个硬件系统,也不可能不开辟数据空间的。至少你要有打印之类的字符对照表之类的,因为那时候的汇编,大多数也只能放在程序当中的。别告诉我你只是用汇编来做一个小时钟。。,那个东西用个晶振就OK的,当然不会有数据。
============================================
我喜欢吵架,也喜欢较真——一定要全歼阿~~~~~~~~~~~~~