圧縮試験:LZMA vs ZLIB

3535 ワード

転載するhttp://blog.domlib.com/articles/388.html
Flash Player 11.4はその後、LZMAの圧縮サポートを提供しました.ネットでは、この圧縮フォーマットの圧縮率はZLIBよりずっと高いと言われています.科学的ではないような気がしますが、自分でテストしたほうがいいです.テストの時に天地会からのas版LZMA解圧類を同時に加えました.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38package{    importflash.display.Sprite;    importflash.utils.ByteArray;    importflash.utils.CompressionAlgorithm;    importflash.utils.getTimer;      importorg.flexlite.domUtils.FileUtil;    importorg.flexlite.domUtils.StringUtil;      /**     *      * @author DOM     */    publicclassCompressTest extendsSprite    {        publicfunctionCompressTest()        {            varbytes:ByteArray = FileUtil.openAsByteArray("doc.json");            vart:int= getTimer();            bytes.compress();            trace("zlib :"+(getTimer()-t)+"ms"+" size:"+StringUtil.toSizeString(bytes.length,2));            t = getTimer();            bytes.uncompress();            trace("zlib :"+(getTimer()-t)+"ms");            t = getTimer();            bytes.compress(CompressionAlgorithm.LZMA);            trace("lzma :"+(getTimer()-t)+"ms"+" size:"+StringUtil.toSizeString(bytes.length,2));            t = getTimer();            bytes.uncompress(CompressionAlgorithm.LZMA);            trace("lzma :"+(getTimer()-t)+"ms");            bytes.compress(CompressionAlgorithm.LZMA);            t = getTimer();            bytes = LZMA.decode(bytes);            trace("LZMA.AS :"+(getTimer()-t)+"ms");        }    }}出力結果:
zlib圧縮:255 ms size:5.08 MB zlib解圧:12 ms lzma圧縮:1974 ms size:5.11 MB lzma解圧:399 ms LZMA.AS解圧:27381 ms
この結果は本当にがっかりしました.テストの問題があるかどうかは分かりません.しかも解圧時間は数十倍も長い.as版のLZMAの解凍時間は更に受け入れられません.やはり引き続きzlibを使いましょう.