2007年01月07日
Flash | AMF3
Open Source Flash - amf3:index
Django AMFのために、ActionScript 3.0で導入されたAMF3メッセージフォーマットのPython実装を行っていたのだが、ほぼ完了してリリースの見込みが立った。
AMF3の公式な仕様は公開されていないが、バイナリデータを解析した先人が上記のページで公開してくれている。
仕様を読んでもよく分からなかったが、最終的に実装してみてAMF3が効率的にデータを取り扱い、データ量を減らしていることがよく理解できた。
例えば、["アイアイ", "アイアイ"] という同じ文字列を含む配列の場合、["アイアイ", #0] というように既出の文字列は参照番号に置き換えられて出力される。
また、[["アイアイ", "アイアイ"], ["アイアイ", "アイアイ"]] という二次元配列の場合は、[["アイアイ", #0], ##0] と、文字列の参照に加え、既出の配列オブジェクトも参照に置き換えられる。配列型、日付型など数値型以外のデータはオブジェクト参照の対象となる。
さらにクラスオブジェクトの場合は、クラス定義(クラス名、クラスメンバーとして定義されているプロパティ名の配列)が先に出力され、以降に表れる同じクラスのオブジェクトはクラス定義への参照番号とプロパティの値だけが出力される。
このようにAMF3は文字列参照、オブジェクト参照、クラス定義参照を使って重複するデータを省き、データ量や解析コストを減らす仕組みを備えている。シンプルな仕組みなので、AMF3へのシリアライズ(AMF3からのディシリアライズ)にもコストが掛からないよく考えられたフォーマットだ。
お陰で実装するのは面倒だったけど。
Comment