原文
$ u: e8 F+ D" O8 Y# W ?; e* X9 N/ K5 Ahttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx: \& ^; p! r% l# O: K
2 n( O8 C {, E9 Ideflate- b# W8 y3 `; `, t1 E ^4 }, B- J
http://www.zlib.net/
& k8 [& \ @, h" n- M1 ]这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。
( F) B0 b; S- R0 P+ }默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。% b( v- K% p/ Q* I* m: P( ~
采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。) X- C$ ?* \5 y$ E/ W/ `
另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。2 f7 o+ t: _& n+ ^$ C& S
* [, Q7 l+ j9 L0 E% Y& T6 ]& V8 j4 i4 |
bzip23 W E' X8 T" Q, ?
http://www.bzip.org/
% f7 Y% W5 q$ P/ {在游戏中很少见,不过确实有游戏公司采用。' \ i7 u2 S6 z7 R$ n+ b
它压缩之后的数据是以BZ开头的。 }5 H" d, i7 m
* L% \( U5 P# S/ c. w: l' ?lzo
, N9 H/ X( u' D6 {& Dhttp://www.oberhumer.com/opensource/lzo/" p7 @9 V) C; \* I
lzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。
- ?( |! q6 B2 p! ~lzo的版权信息是:
( |* G, I/ I; D6 M) X“LZO data compression library. M \# u0 @6 F; ]: k) H
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer
$ W" @7 s9 A( U2 s<[email protected]>
8 T6 c6 d8 w8 g6 \: \$ n0 shttp://www.oberhumer.com $”
5 t* B( t% }; ^) ?2 M6 J+ H. R3 T! j1 D3 S
rle# |9 [! X7 L+ n8 R3 w/ Q1 ?
http://www.datacompression.info/RLE.shtml/ W( U) e$ }. j# @+ h+ V! b
RLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。
" s* n. f: U. E T较早的游戏一般用RLE算法压缩透明色。 i1 O1 a# x; K" u {- R4 J. U+ ~
标准的rle算法通常用字节的高2位做标记,因此比较容易识别。* Q m# _7 u2 x8 z
! k7 f; k5 D, R& ylzss% N1 z0 X; g D7 `: M- V% N
http://www.datacompression.info/LZSS.shtml1 S& P) W7 r6 h: r b
日本人Haruhiko Okumura发明的压缩格式。) }1 @7 j: N* g* D X
这个算法有非常多的变种,在较早的游戏中比较常见。
# e1 {, ]2 l" }0 v2 g' A仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。. R9 N- Q* i" r/ k& n l
标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。# ^& J) I- c: c
/ Y8 W& {' S- U- w- olzhuf5 P1 |' n) G/ ^4 r0 j
日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。
' e. D D$ ^- f6 t2 @相比lzss更复杂一些,在早期的游戏中也比较常见。# j n2 h j/ W1 {; P- @
C# o7 [! |; A) D8 z1 ]
最后贴一篇压缩算法的历史回顾4 g8 n6 h$ p+ l0 U7 g$ R
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |