原文
2 G: R ~* b4 r4 Nhttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx/ D( }+ n8 ~* l j4 L8 x
8 ]! J# l( u; K; A' h. w
deflate
! ~2 C( ]4 l0 T( y8 |# d+ Ihttp://www.zlib.net/. w* u/ ?5 A# x" q
这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。
9 q" H }; j& ]( p默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。
8 G4 n; _7 r. ?, D0 E# C采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。
$ g2 L9 X Y$ k% |1 {1 Q8 z另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。
; s4 r5 [. y0 J2 R9 n e* m; i; ^1 V' {% H3 f3 W6 d( b
bzip2/ w/ x/ t# H' I+ ?& m! Y0 Y
http://www.bzip.org/% F6 l5 T) O7 d/ d6 N
在游戏中很少见,不过确实有游戏公司采用。
b. H- ?% \- q$ h/ K; \& Q它压缩之后的数据是以BZ开头的。3 j' g/ v8 h) g1 p3 B8 R
8 a: n, ~5 ^2 O+ O+ k
lzo1 I2 M8 r9 F* k+ L
http://www.oberhumer.com/opensource/lzo/
3 K6 p8 |: _' T$ Llzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。
; a- l4 H: T. E. L; K- z( xlzo的版权信息是:( @ B% c+ @0 N! \9 @( u
“LZO data compression library.
! M! m# u) a1 q1 }9 j2 i8 _- B. Y$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer
7 _( A% q. w v- w<[email protected]>
$ f3 r$ I$ X7 F' ^0 Z9 s0 C2 }http://www.oberhumer.com $”
! j t, T* o+ P' r- G) b* a1 c2 X8 `0 e$ p. x8 L, R
rle
! j. G2 S3 R9 K7 f) Whttp://www.datacompression.info/RLE.shtml
2 h4 t# D% ?) `- J/ N- @RLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。9 w) p, K9 c1 Z, v# Z( O) ?$ @' f
较早的游戏一般用RLE算法压缩透明色。5 M0 t# e- G8 f+ X1 d) a4 k
标准的rle算法通常用字节的高2位做标记,因此比较容易识别。
. y+ G5 @' r0 ]" x) [7 i1 R( [& |/ p
& H7 E# h* Z! o1 C! Y- W8 f' \9 Blzss
5 M) B' ], S2 n' `+ {http://www.datacompression.info/LZSS.shtml, ?4 a4 \3 e4 E. d1 [2 @
日本人Haruhiko Okumura发明的压缩格式。
* ^& I5 W& n2 C* Z( C1 B这个算法有非常多的变种,在较早的游戏中比较常见。
3 w1 o; T" U1 z+ [仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。: p; o* D, t! u: ?9 h3 m9 ^
标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。
: Y9 G. \) E7 k, k4 Z& Y4 ?. m/ m3 }' a& e! D' J
lzhuf
) Q4 Z5 y9 l6 \( I% _4 Y) T日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。
* z( o" w) N( A2 w相比lzss更复杂一些,在早期的游戏中也比较常见。! A/ n4 j5 Q" M8 ^8 P. B
9 p6 C" R6 f+ J/ Y( _. W6 a! n; m最后贴一篇压缩算法的历史回顾# c7 v8 q$ e: h8 w% @& t# Y$ R
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |