原文
3 B# r% i1 Q0 s1 p" vhttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx
1 l* L# g$ ~- A4 r4 w1 C3 k4 H' g: F( g; F H+ J# t+ j
deflate
/ U+ l& P v3 F* N9 _* \http://www.zlib.net/ e2 U$ q& r, j, f8 \' l/ B
这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。, N/ {( h0 J K$ O) u9 f
默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。8 I1 i; [. Y+ f! \5 F; L
采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。+ e) Y0 T3 [* j p
另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。
6 j' p3 p& \/ @1 w, u% t; V) _" e2 u3 W o9 w
bzip2" k6 A2 `( m' z5 h- j
http://www.bzip.org/
. G8 ? w5 Q1 w在游戏中很少见,不过确实有游戏公司采用。
# } _ E4 _, }. U! F: G- x# l它压缩之后的数据是以BZ开头的。
5 E8 O) ^: c6 a7 o# `# F) J9 _7 @3 T5 U: @* `5 |
lzo
# }2 F* X) G5 rhttp://www.oberhumer.com/opensource/lzo/9 q: k% A- ~2 B+ [2 b( }
lzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。
- e: d. Y! }9 E o7 E( olzo的版权信息是:1 g. j, n& l. g% s# J, t
“LZO data compression library.6 P) O8 j# p# s( B
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer9 ?: ^* [5 E0 r0 V
<[email protected]>
- J/ x, f0 \' j4 \- d7 phttp://www.oberhumer.com $”" ?2 x3 `6 j' c4 Y1 u: y9 _
$ Z1 Y: c, c" K" e) g8 Drle
( I, s& b5 W# O4 l8 I) p2 Vhttp://www.datacompression.info/RLE.shtml. `- V4 M4 i, u( Z5 `" d
RLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。
; x+ ~, M8 C( Y" f. `; |7 |5 T5 M: D较早的游戏一般用RLE算法压缩透明色。+ \$ X' Z, G2 m
标准的rle算法通常用字节的高2位做标记,因此比较容易识别。- ^3 H" i& [/ R |% i
) X- f, o8 p- B9 y
lzss
6 w6 O% |0 S3 m" l. I$ Lhttp://www.datacompression.info/LZSS.shtml0 q7 z3 B3 ^8 ~( ^0 B; {
日本人Haruhiko Okumura发明的压缩格式。+ C3 i+ c* Q- a9 N. l# a, I4 B
这个算法有非常多的变种,在较早的游戏中比较常见。% b) S( P0 V7 s6 B' H8 S1 D |
仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。
9 T/ r! V5 C# Y9 L# b/ s1 U标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。! L, `6 r/ {0 R
7 g) w% D4 A" b3 b% O
lzhuf
, y7 t3 u% Z# x日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。0 y# f$ M7 R! _8 S$ u
相比lzss更复杂一些,在早期的游戏中也比较常见。
: M* ?- ?; d" D1 d5 ~- }
" G" b* a" K$ S. O, C最后贴一篇压缩算法的历史回顾
/ W3 v7 b6 [9 w; phttp://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |