KeyFansClub

首页 » - 特色讨论区 - » 键社茶餐厅 » [0楼更新] [技术贴] 讨论过的某物 有兴趣的来看
Prz - 2005/2/10 13:56:00
今天再次调试了一下,清除了最后几个小Bug, 现在理论上应该能够压缩任何大小(2GB以内)的文件然后完美还原。

性能参数:

(P4 2.6G, HT开)
压缩速度 50K - 6M/sec
解压速度 18M - 6M/sec

压缩比随文件的不同而变,最好情况8:1 (12.5%),最坏情况8:9 (112.5%)
特点: 文件压缩比越高,压缩/解压速度越快

各种文件类型大约压缩比如下:

文本文件 13% - 30%
Word文件 40% - 80%
BMP文件 40% - 80%
JPEG文件 >100%
WAV文件 95% - >100%
ICO文件 40 - 60%
EXE文件 50 - 70%
各类无损压缩文件 理论上>100%

1KP 统计下载数量
[Payview=1]
本程序仅为证明理论(Proof-of-concept)用,禁止除个人实验外的任何商业/非商业用途!

命令行:
压缩文件 TestPacker Pack <文件名>
解压文件 TestPacker Unpack <文件名>

注意:
* 压缩文件 "文件.后缀" 完成后自动生成 "文件.PAK" 文件,如有重名,自动覆盖处理;
* 解压文件 "文件.后缀" 完成后自动生成 "文件.UPK" 文件,如有重名,自动覆盖处理;
* 解压过程仅对应此程序生成的压缩文件,尝试"解压"其他类型的文件将产生不可预知的后果.

- 为提高性能,处理过程中没有进度显示,如果压缩>2M的非文本文件,处理时间估计会超过40秒,长则数分钟。
- 压缩生成的文件比显示的大小大8个字节,这是正常现象。(此八个字节用于记录源文件和压缩文件的大小,附加在文件的末尾)

[URL=upload/KFCFile3123_TestPacker.rar]上传文件3123[/URL]

---------------------黄金分割线---------------------

今日再次优化代码,现在压缩引擎的速度有了很大的提高。

对于高压缩率的文件(<20%),压缩引擎的速度比解压还快... >_<
低压缩率的文件速度也有较大的提高(至少20%).

新引擎压缩速度 70K - 17M/sec
新引擎解压速度 18M - 6M/sec

[注意:此文件用此引擎压缩...盗用一下LZH的后缀(反正都是一家人,无所谓了^o^)...要解压请使用此引擎...嘿嘿嘿]
[URL=upload/KFCFile3131_TestPacker.LZH]上传文件3131[/URL]

[/Payview]
芽依子 - 2005/2/10 14:02:00
这里看来APE,TTA,FLAC等等东东都是难以再压缩的。
白井功名 - 2005/2/10 14:52:00
XP下运行以后出现命令提示符以后就直接跳出来了?
starkakaru - 2005/2/10 15:00:00
XP下运行出现相同问题,汗~~
valleyforge - 2005/2/10 15:09:00
这是命令行运行的程序...

xp请在开始菜单 附件中点 命令提示符
或开始 -> 运行 -> cmd.exe
Prz - 2005/2/11 2:16:00
友情提示: 解压新版程序需使用旧版...参见解压命令行格式。
nitekid - 2005/2/11 10:33:00
以下引用Misha在2005-2-10 13:56:42的发言:
特点: 文件压缩比越高,压缩/解压速度越快



看来瓶颈是硬盘传输吧……
Prz - 2005/2/11 10:39:00
....楼上的这个结论有点.....草率...吧...
如果我告诉你,所有的压缩和解压过程全都在内存中进行,读取/写入文件不在计时范围内呢
nitekid - 2005/2/11 10:47:00
恶搞声音一:“原来瓶颈是访存指令啊”
恶搞声音二:“那说明你物理内存不够”
恶搞声音三:“我知道你没开磁盘高速缓存,放弃吧”
Prz - 2005/2/11 10:54:00
三个都没沾边......
nitekid - 2005/2/11 10:56:00
不开玩笑了,
压缩速度 50K 是什么情况?
Prz - 2005/2/11 11:03:00
...

文件压缩比越高,压缩/解压速度越快

也就是说 压缩/解压速度越慢,文件压缩比越低

附:
8:1 = 8.0 (高)
8:9 < 0.9 (低)
nitekid - 2005/2/11 11:10:00
看来对于jpg,ape,flac之类的东西进行二次压缩还会导致压缩速度的降低咯
但是好像rar的算法速度不太受这类情况影响
Prz - 2005/2/11 11:10:00
其实经我改进过的解压引擎,速度差别已经不是很明显了...

我刚才又想到一个快速压缩的新算法,周末写写看有多大的提高 (我估计会翻倍 ^o^)
nitekid - 2005/2/11 11:23:00
真是勤快的JJ
对了,我正在研究图像算法,你写的那个Scene Editor如果需要图像相关的编程可以找我
Prz - 2005/2/11 13:00:00
PDT? PDT和G00也是用这个引擎的变种压缩的,理论上只需要改变一点点就可以了...不过最近还缪时间,首要任务是做成AVG32和Reallive脚本再打包器...
YWT - 2005/2/11 14:11:00
对了,有关AVG32和RealLive的指令参数的问题。某些指令例如条件跳转等的参数又了解了吗?否则的话编辑器的应用范围还是有限。
以前也写过一个压缩算法,不过是基于zLib的。
Prz - 2005/2/12 7:40:00
zlib在AVG2000中也有应用,是一种叫DaemonBane的文件...现在暂时还没开始研究AVG2K的文件种类

不过跳转这些基本的指令的格式我还是清楚的
其实,你看看我的AVG32脚本阅读器里面,只要有分类图标的指令,我都清楚其格式和参数的意义,只不过没有时间详细的写出来罢了...

[UserView=223,3570]
你如果感兴趣的话,我可以告诉你条件转移指令的格式,你可以自己尝试人工阅读....其实还是挺有趣的:
格式为 <指令头>(...((条件)<逻辑符>...(条件))<逻辑符>((条件)<逻辑符>...(条件))...)<否则转移地址>

指令头: $15
条件: <条件类型><参数1>[参数2] (<条件类型>长为1字节)

参数格式: 一个参数可能为实参,也可能为变参,看得是第一个字节
一个字节8位 7 6 5 4 3 2 1 0
  第7位为1则该数为变参,否则为实参
  第6-4位为参数长度,如果为1则不用继续读(已经读了这一个了),如果为2则往下读一字节...以此类推 (此数不应该超过5)
  第3-0位为参数的低4位,也就是说如果你往下读了2个字节的话,整个参数的数值就是
  <往下0-7位>    <往下8-15位>    <低4位>
  7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 3 2 1 0
  获得了数值以后,如果是变参的话,就把数值当作一个编号去抓变量列表中的第<数值>个记录

逻辑符: <AND>或者<OR> 均为1字节长 (AND是'&' OR忘了反正不是'&'就是OR了)

转移地址: 4字节整数

举例:
  (  (  :      )  &  (  6  .  |    )  )  ?       
15 28 28 3A 12 10 29 26 28 36 2E 7C 10 29 29 F0 03 00 00

伪码翻译:
如果 (整数变量[2] 不等于 0) 而且 (位变量[$7CE] 不等于 0) 的话 继续下一个指令
否则 跳转$F0030000 (注意此数为带符号整数)

[/UserView]

对了,好像AVG2K引擎可以支持PNG和JPEG格式的图像了

顺便提一下,几天前一不小心瞄到了AVG2K引擎的声音播放指令,同样支持WAV文件...嘿嘿...看来语音化还是有戏的...
其实就怕VA一怒,不再支持WAV声音文件,只支持自己的特殊格式,那就太麻烦了,还需要自己转换格式...看来现在不用担心了
Fantastical - 2005/2/17 12:03:00
上当了……
我以为做的是用来压缩任意个数文件的……正好用来做我的测试数据……555~~~~~
1
查看完整版本: [0楼更新] [技术贴] 讨论过的某物 有兴趣的来看