2006-09-02
■ あのぅ、あ、圧縮してください!

flash.utils.ByteArray には uncompress() がある。埋め込みデータを圧縮しとけばswfファイルサイズが小さくて済む。
[Embed(source='a.z', mimeType='application/octet-stream')]
private static const Z0:Class;
var a:ByteArray = new Z0() as ByteArray;
a.uncompress();
圧縮済みデータはByteArrayのcompress()で作れる。でもデータファイル作成のためにFlash Playerをうごかすのはいかがなものかと。ファイル作るのも面倒そうだし。
zlibを使ったやつならなんでもいいようだけど、やっぱりFlex2開発環境に統合できるのが良い。ちょっと実験したところ、java.util.zip.DeflaterOutputStream でいいみたい。 GZIPOutputStream や ZipOutputStream ではだめだった。
OutputStream out = new BufferedOutputStream(new FileOutputStream("a.z"));
out = new DeflaterOutputStream(out);
// ここで out.write(バイト列)
out.close();
これで前日の地図データは18496バイトから2278バイトに圧縮できた。圧縮美!






S2Flex2で、javaで、ByteArrayの実装をしていますので、よかったら使ってみて下さい。