SlideShare uma empresa Scribd logo
1 de 19
AMF3の真実 The knowledge of AMF implementation. Presented by wacky FxUG in Toyama#3	2011.4.16 http://amf48.develop.jp/
最近AMF3のEncode/Decodeを実装してみました。 http://amf48.develop.jp/で公開しています そこで得た知識を共有したいと思います! 30分後には… AMFの基本構造が分かっている AMFの得手不得手が分かっている BlazeDSの弱点も分かっている はじめに
Action Message Formatの略、データ形式の一種。 仕様はAdobeから公開されている。 ActionScript3(Flex2以降)の型に対応している。 Flash Player 9から使用可能。 AMF3仕様: http://opensource.adobe.com/wiki/display/blazeds/Developer+Documentation http://opensource.adobe.com/wiki/download/attachments/1114283/JP_amf3_spec_121207.pdf http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf What is AMF3?
AMF3の立ち位置
AMF3バイト配列を読む! (文字列) 06 07 41 42 43 Marker (string) 00000111 ABC(UTF-8) 0000011x 3バイト xxxxxxx1 参照ではない
09 05 01 06 07 41 42 43 06 00 AMF3バイト配列を読む! (配列) 00000000 Marker (string) 00000101 00000001 Marker (array) 0000010x 2要素 xxxxxxx1 参照ではない xxxxxxx0 参照 0000000x 0番目 空文字列(疎データ無)
AMF3の内部データ形式
AMF3では、3種類の参照情報を管理している。 文字列 オブジェクト(Object, Array, Date, XML, ByteArray) Traits情報(オブジェクトの型情報) プロパティー名リストのようなもの 既出の文字列は、2~5バイトで送信可能。 既出のオブジェクトも、 2~5バイトで送信可能。 ただし、同一インスタンスの場合のみ 既出のTraits情報も、2~5バイトで送信可能。 参照テーブル
AMF3データ構成編 ~終了~
整数(int)は可変バイトでEncodeされる。 整数 (int)のEncodeサイズ ※SizeはMarkerに必要な1 byteを含む。 ※int領域全体での平均サイズは、実は約8.5 byte… ※Vector内のintは固定バイト(4 byte)となる。
整数(long)は固定でMarker + 8バイトにEncode ただし、形式はdouble形式。 つまり、桁落ちします… longの範囲(64bit) -9223372036854775808~9223372036854775807 正しくEncode->Decodeできる範囲(53bit) -9007199254740992~9007199254740992 整数 (long)のEncodeサイズ ※元々、Flex上では表現できない数字だけど…
サンプルデータ(異なる値) オブジェクトのEncodeサイズ(1) // Sample: Dynamic値 var target:Array = []; for (var k:int = 0; k < 1000; k++) {     target.push({ index: k, message: "Message" + k }); } // Sample: Sealed値 var target:Array = []; for (var k:int = 0; k < 1000; k++) {     target.push(new Bean(k, "Message" + k)); }
サンプルデータ(同じ値、別インスタンス) オブジェクトのEncodeサイズ(2) // Sample: Dynamic値 var target:Array = []; for (var k:int = 0; k < 1000; k++) {     target.push({ index: 999, message: "Message999" }); } // Sample: Sealed値 var target:Array = []; for (var k:int = 0; k < 1000; k++) {     target.push(new Bean(999, "Message999")); }
サンプルデータ(同一インスタンス) オブジェクトのEncodeサイズ(3) // Sample: Dynamic値 var target:Array = []; var item:Object = { index: 999, message: "Message999" }; for (var k:int = 0; k < 1000; k++) { target.push(item); } // Sample: Sealed値 var target:Array = []; var item:Bean = new Bean(999, "Message999"); for (var k:int = 0; k < 1000; k++) { target.push(item); }
オブジェクトのEncodeサイズ(4)
AMF3は圧縮形式なの? 同一データを重複送信しないだけ。圧縮すると減る。
実は、AMF3の仕様書に載っていない         新しいデータタイプが存在… Flash Player 10を使用すると発生… 新データタイプ
Java5対応されていない Enum: 文字列にエンコード。デコードは未対応。 Generics: 無視される。※List<Integer>とか厳しい… Unicodeのサロゲートペア未対応 Encode: サロゲートペア1文字が、6バイト(UTF-8)にEncodeされてしまう。※正しくは4バイト Decode: Flash Player10でEncodeしたサロゲートペアをDecodeすると例外が発生。 Flash Player10未対応 Vectorを扱えない。 Dictionaryを扱えない。 BlazeDSが微妙な件… ※BlazeDS-4.0.0.14931で確認
お疲れさまぁ~ m(__)m

Mais conteúdo relacionado

Destaque

Best Practice Guideline to Managing On-site Vermiculture Technologies
Best Practice Guideline to Managing On-site Vermiculture TechnologiesBest Practice Guideline to Managing On-site Vermiculture Technologies
Best Practice Guideline to Managing On-site Vermiculture Technologiesx3G9
 
Stokvis Tapes
Stokvis TapesStokvis Tapes
Stokvis Tapesstokvis
 
Lean Translation -
Lean Translation - Lean Translation -
Lean Translation - PhraseApp
 
Aula 1 a obra de kant como síntese do nascente pensamento burguês
Aula 1   a obra de kant como síntese do nascente pensamento burguêsAula 1   a obra de kant como síntese do nascente pensamento burguês
Aula 1 a obra de kant como síntese do nascente pensamento burguêsLeandro Alano
 
Kedaulatan Rakyat 2 Maret 2014
Kedaulatan Rakyat 2 Maret 2014Kedaulatan Rakyat 2 Maret 2014
Kedaulatan Rakyat 2 Maret 2014hastapurnama
 
Recovery as a Service Technical Deep Dive
Recovery as a Service Technical Deep DiveRecovery as a Service Technical Deep Dive
Recovery as a Service Technical Deep DiveBluelock
 
Yellow Slice Design Profile - 2016
Yellow Slice Design Profile - 2016Yellow Slice Design Profile - 2016
Yellow Slice Design Profile - 2016Yellow Slice
 
Extending Ajax Events for all mankind
Extending Ajax Events for all mankindExtending Ajax Events for all mankind
Extending Ajax Events for all mankindKyle Simpson
 
Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Christopher Chedeau
 
How to create the life you want
How to create the life you wantHow to create the life you want
How to create the life you wantSelf-employed
 
三百多个桥梁工程专有名词术语解释
三百多个桥梁工程专有名词术语解释三百多个桥梁工程专有名词术语解释
三百多个桥梁工程专有名词术语解释undral13
 

Destaque (13)

JCLIC
JCLICJCLIC
JCLIC
 
Best Practice Guideline to Managing On-site Vermiculture Technologies
Best Practice Guideline to Managing On-site Vermiculture TechnologiesBest Practice Guideline to Managing On-site Vermiculture Technologies
Best Practice Guideline to Managing On-site Vermiculture Technologies
 
Stokvis Tapes
Stokvis TapesStokvis Tapes
Stokvis Tapes
 
Lean Translation -
Lean Translation - Lean Translation -
Lean Translation -
 
Aula 1 a obra de kant como síntese do nascente pensamento burguês
Aula 1   a obra de kant como síntese do nascente pensamento burguêsAula 1   a obra de kant como síntese do nascente pensamento burguês
Aula 1 a obra de kant como síntese do nascente pensamento burguês
 
Kedaulatan Rakyat 2 Maret 2014
Kedaulatan Rakyat 2 Maret 2014Kedaulatan Rakyat 2 Maret 2014
Kedaulatan Rakyat 2 Maret 2014
 
Recovery as a Service Technical Deep Dive
Recovery as a Service Technical Deep DiveRecovery as a Service Technical Deep Dive
Recovery as a Service Technical Deep Dive
 
Yellow Slice Design Profile - 2016
Yellow Slice Design Profile - 2016Yellow Slice Design Profile - 2016
Yellow Slice Design Profile - 2016
 
Extending Ajax Events for all mankind
Extending Ajax Events for all mankindExtending Ajax Events for all mankind
Extending Ajax Events for all mankind
 
Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]
 
How to create the life you want
How to create the life you wantHow to create the life you want
How to create the life you want
 
三百多个桥梁工程专有名词术语解释
三百多个桥梁工程专有名词术语解释三百多个桥梁工程专有名词术语解释
三百多个桥梁工程专有名词术语解释
 
Visvi
VisviVisvi
Visvi
 

Semelhante a Amf3の真実

JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 
2013 1019osc-fallnetmf
2013 1019osc-fallnetmf2013 1019osc-fallnetmf
2013 1019osc-fallnetmfAtomu Hidaka
 
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019SORACOM,INC
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefoxdynamis
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmfAtomu Hidaka
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesTakeshi Fukuhara
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発Kentaro Inomata
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門l_b__
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るandroid sola
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobeYamauchi isamu
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMFAtomu Hidaka
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Installphillippro
 
cosmomc install
cosmomc installcosmomc install
cosmomc installphillippro
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Installphillippro
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めYou&I
 
CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御Toshiharu Harada, Ph.D
 

Semelhante a Amf3の真実 (20)

JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
2013 1019osc-fallnetmf
2013 1019osc-fallnetmf2013 1019osc-fallnetmf
2013 1019osc-fallnetmf
 
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019
SORACOM を使いこなすために 「1年のアップデートを一言解説」「サポートのより良い活用方法」 | SORACOM UG Explorer 2019
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Snapdragon-SCORER
Snapdragon-SCORERSnapdragon-SCORER
Snapdragon-SCORER
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobe
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Install
 
cosmomc install
cosmomc installcosmomc install
cosmomc install
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Install
 
Cosmomc
CosmomcCosmomc
Cosmomc
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御
 

Amf3の真実