原文
5 n2 l+ @# N4 J9 ?3 m2 x- u" ?$ lhttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx4 ~! m* A! y3 J) J
/ S1 u# l1 G0 B' odeflate' O0 M- F, z# ~* [/ U
http://www.zlib.net/
7 g, [: }+ b. d B% \这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。. z# N6 D' D0 r* f( _6 A6 w8 ]$ i
默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。
" ~6 |* ^ W3 S& }: v+ a2 p采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。, x9 C1 Q" W. @0 y6 G
另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。3 W. S$ d: K K( u) w0 P2 _
7 M. |! J: z9 W
bzip2; T0 Z- M# r' U6 J# Z
http://www.bzip.org/. R- J. y& n0 N/ @& ]6 C) Y
在游戏中很少见,不过确实有游戏公司采用。6 n; W8 L& d& W1 t2 X- g% @7 l9 ^
它压缩之后的数据是以BZ开头的。' I4 g# a5 M! T% p; P
( U2 b# J! _9 c/ Nlzo3 x2 ~0 u6 G" D4 P7 Z2 w# x b9 `1 F
http://www.oberhumer.com/opensource/lzo/
; _2 ? O" H6 C7 clzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。1 M( p7 S7 o/ y5 n ^6 @1 |
lzo的版权信息是:
! C; C' R7 P4 p- A, }- X“LZO data compression library.; ~7 T( x/ M3 n: F+ z3 k1 v
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer
: ~/ w0 u4 |2 P1 i<[email protected]>; D5 w! W8 i+ @' x8 D7 \
http://www.oberhumer.com $”, y& v% b* W6 Z. v, h2 N
8 P O. ]$ D" \; f6 w% g: V
rle% E7 d6 n# N; D: u, O
http://www.datacompression.info/RLE.shtml8 w/ _ K$ K8 P2 ^% X" k9 U7 |; E0 @
RLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。
[$ B% t; a' U3 [# x较早的游戏一般用RLE算法压缩透明色。/ p- G4 t) y: R3 ~8 Y3 P
标准的rle算法通常用字节的高2位做标记,因此比较容易识别。
4 Z0 C! r4 h8 g( N+ }: Y/ E R2 s/ C1 E
lzss/ s0 x: h9 A8 q; h- O" b
http://www.datacompression.info/LZSS.shtml
! l. a$ N/ R, A# K. i7 N日本人Haruhiko Okumura发明的压缩格式。
7 d) J- D5 E2 H( f% h9 b这个算法有非常多的变种,在较早的游戏中比较常见。( R4 _ @3 m( d0 d2 _4 i, I, y3 v# g
仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。
" f1 R2 `, F+ i' F/ X标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。( A# O: |! O5 b' y1 I; K
- o( E0 P: E/ _1 v
lzhuf
( g9 _, }, Y! N) [/ z, l日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。2 A3 Z/ o M/ P, \
相比lzss更复杂一些,在早期的游戏中也比较常见。
/ b/ f3 C8 ^6 I+ ]
! Y2 ~/ o- G V: {; L& Y3 B6 }最后贴一篇压缩算法的历史回顾5 ]' T5 B. k0 H. ^! m( w# w
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |