原文
/ A1 K3 R) ~5 Z9 khttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx& U/ R7 m2 i. B& l( J" x. z
0 q2 ?) A _) l( ~7 T0 mdeflate0 R& F/ ^" z0 f/ c9 F0 O5 o8 |! x
http://www.zlib.net/
9 V X p d0 g$ `这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。 t' S( Q" W- n9 }
默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。
* k( u6 ~. X: s" o采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。- {7 y: r- d0 A$ z f
另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。
' x: I) n4 R2 a/ p/ M B9 E4 v6 Z$ [8 R, `' q
bzip2
& y' K# a) c5 J$ `+ \( n2 Phttp://www.bzip.org/) T$ s6 V% E; U6 w
在游戏中很少见,不过确实有游戏公司采用。
- D' R1 F/ ]- a/ A它压缩之后的数据是以BZ开头的。
| j2 Z ~3 S' B/ W0 x8 N
& a* v- P. G$ d! _lzo0 _# l; k6 J3 p2 V0 g- L# Z* Q$ o* b
http://www.oberhumer.com/opensource/lzo/
) P7 _7 Z' ]5 a+ Q0 O3 j# I& flzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。5 o% |8 g7 j: ^& E6 [. o/ T0 J
lzo的版权信息是:! T K6 x; J6 V
“LZO data compression library.! z& v8 E3 B2 c2 D4 ]
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer* K* w$ c' n8 @, f. n Y
<[email protected]>2 r4 e3 S* t' n6 y
http://www.oberhumer.com $”
7 G2 t @# t" c8 s' H8 @
) F0 m8 y1 s' J* Rrle
* e5 u6 h3 x# |, Z! {http://www.datacompression.info/RLE.shtml
" G6 |( y7 T; |1 ^8 F1 wRLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。( l+ W2 j1 ]- A6 W3 S1 W/ H
较早的游戏一般用RLE算法压缩透明色。
9 }7 W8 ?& Z3 c, {6 l标准的rle算法通常用字节的高2位做标记,因此比较容易识别。
1 A7 w2 d/ o5 D$ _6 [1 S% X, S. s' }; B2 A! x
lzss
; {% ~5 l4 |+ x' K# _http://www.datacompression.info/LZSS.shtml
, X6 j+ b' p: Q6 x" f% t日本人Haruhiko Okumura发明的压缩格式。
, o8 [* a+ X! Z) M1 Z/ R7 f这个算法有非常多的变种,在较早的游戏中比较常见。
! ?6 d( K* x" u仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。7 D8 Y! X8 L: H4 g8 J" J) p, i% X
标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。$ V: u1 X; g6 ~! o3 l
5 X' C: t- s- P$ Y6 Y5 s8 M
lzhuf. o0 k! x: h- b' h8 t! L- h& }; [ u. B. ]
日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。
& h& Y7 `1 O3 J/ T7 _! h相比lzss更复杂一些,在早期的游戏中也比较常见。5 x$ M2 R9 _, f& B& n9 U. Q) [/ K: C' P
k/ F! m5 S x5 v, r3 f D
最后贴一篇压缩算法的历史回顾
) M1 V9 H! |7 G+ A9 ^+ bhttp://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |