Skip to content

Instantly share code, notes, and snippets.

@mntone
Last active January 11, 2019 14:14
Show Gist options
  • Save mntone/7275629 to your computer and use it in GitHub Desktop.
Save mntone/7275629 to your computer and use it in GitHub Desktop.
Amf0 の日本語マニュアル (簡易版)

Action Message Format ― Amf0

1 序章

1.3 基本ルール

  • U8 = 符号なし8ビットデータ
  • U16 = 符号なし16ビットデータ、ネットワークバイトオーダー (ビッグエンディアン)
  • U32 = 符号なし32ビットデータ、ネットワークバイトオーダー (ビッグエンディアン)
  • DOUBLE = IEEE754 8バイト浮動小数点、ネットワークバイトオーダー (ビッグエンディアン)
  • KB = キロバイト
  • GB = ギガバイト

1.3.1 文字列とUTF-8

(省略)

UTF-8 = U16 *(UTF8-char)

(省略)

UTF-8-long = U32 *(UTF8-char)

UTF-8-empty = U16

2 Amf 0 データ型

2.1 型の概要

Amf0には16の型マーカーがある。型マーカーは長さ1バイトで、データの種類を示す。それに従ってデコードを行う。

marker = U8

下のリストにマーカーとして使えるものを記す (16進数で表す):

  • number-marker = 0x00
  • boolean-marker = 0x01
  • string-marker = 0x02
  • object-marker = 0x03
  • movieclip-marker = 0x04 ; 予約済み、未サポート
  • null-marker = 0x05
  • undefined-marker = 0x06
  • reference-marker = 0x07
  • ecma-array-marker = 0x08
  • object-end-marker = 0x09
  • strict-array-marker = 0x0A
  • date-marker = 0x0B
  • long-string-marker = 0x0C
  • unsupported-marker = 0x0D
  • recordset-marker = 0x0E ; 予約済み、未サポート
  • xml-document-marker = 0x0F
  • typed-object-marker = 0x10

注意: Amf3の概要にてFlash Player 9における、特別なマーカーがAmf0に加えられている。それはAmf3シリアライズに切り替えるマーカーに相当する。これはNetConnectionでAmf0で始めたものをAmf3に切り替えるリクエストを行うことを許す。Amf3はAmf0より効率的にエンコードできるという利点がある。

avmplus-object-marker = 0x11

(省略)

2.2 Number型

Amf 0のNumber型はActionScriptのNumberを符号化するのに使う。Number型マーカーに続いて、IEEE754 8バイト浮動小数点がネットワークバイトオーダーで配置する (符号ビットは先頭)。

number-type = number-marker DOUBLE

2.3 Boolean型

Amf 0のBoolean型はprimitive ActionScript 1.0や2.0のBooleanあるいはActionScript 3.0のBooleanを符号化するのに使う。ActionScript 1.0や2.0のnon-primitive Booleanではシリアライズしない。Boolean型マーカーに続いて、符号なし8ビット整数でtrueの場合は非0 (通常は1)、falseの場合は0を配置する。

boolean-type = boolean-marker U8 ; 0はfalse、非0はtrue

2.4 String型

Amfではすべての文字列はUTF-8で符号化する。しかしながら、バイト長ヘッダーのフォーマットは異なる。Amf 0 String型は標準的なバイト超ヘッダーを使う (例えばU16)。UTF-8で符号化された65,535バイトを超える長い文字列のためにAmf 0 Long String型も使うことができる。

string-type = string-marker UTF-8

2.5 Object型

Amf 0 Object型は匿名ActionScriptオブジェクトを符号化するのに使う。登録されていないあるtyped objectは匿名ActionScriptオブジェクトとして扱う。もしオブジェクトグラフに同じオブジェクトインスタンスが現れたなら、Amf 0の参照を使うべきである。

周期的な参照でシリアライズや無限ループから冗長な情報を減らすためにreference型を使う。

object-property = (UTF-8 value-type) | (UTF-8-empty object-end-marker)

anonymous-object-type = object-marker *(object-property)

2.6 Movieclip型

この型は未サポートです。将来的に使うために予約されています。

2.7 null型

null型はnull型マーカーとして示される。型マーカー以外の情報は付与しない。

null-type = null-marker

2.8 undefined型

undefined型はundefined型マーカーとして示される。型マーカー以外の情報は付与しない。

undefined-type = undefined-marker

2.9 Reference型

Amf0は匿名オブジェクト、型オブジェクト (typed object)、配列、EcmaArrayとして複雑なオブジェクトを定義する。もしオブジェクトグラフで複雑なオブジェクトの同じインスタンスが1回よりも多く存在すれば、referenceを送信しなければならない。reference型は符号なし16ビット整数で以前にシリアライズしたオブジェクトのテーブルにインデックスを振っていく。インデックスは0から始まる。

reference-type = reference-marker U16 ; ある複雑な型へのインデックスポインター

2.10 ECMA Array型

Ecma Arrayまたは『関連付けられた』Arrayは普通でないインデックスを含むActionScript配列のときに使う。この型は複雑な型が考慮されており、それ故referenceによってインスタンスが再び現れることもある。すべてのインデックスは数字の文字列が『キー』として扱われる。この型の符号化目的はは匿名タイプにとても似ている。

associative-count = U32

ecma-array-type = associative-count *(object-property)

32ビットassciative-countは4,294,967,295の関連配列エントリーを理論的最大として含むことができる。

2.11 Object End型

object-end-markerは匿名オブジェクト、型オブジェクト、連想配列のオブジェクトプロパティーセットの末端を示す特別な型として使われる。それはこの型の外は予期しない。このマーカーは空のUTF8文字とobject end型が合わさったものが先導する。

object-end-type = UTF-8-empty object-end-marker ; 0x00 0x00 0x09

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment