2012-03-15 14 views
0

オブジェクトをAMFにシリアル化したいので、結果をNetConnection.call()によってシリアル化されているのとまったく同じにします。したがって、ByteArray.writeObject()を使用し、出力バイトは通常NetConnection.call()によって送信されるバイトと同じですが、時にはバイト数が異なります。NetConnectionとまったく同じようにAMFにシリアル化

これは、AMF3仕様で見つかった:「ByteArray.writeObjectは、オブジェクト全体をエンコードするのにAMFの1つのバージョンを使用することに注意してください.NetConnectionとは異なり、ByteArrayはAMF 0から開始せず、AME 3に切り替えません(objectEncodingプロパティセットAMF 3へ)」その違いを説明します。

どうすればこの問題を解決できますか?

+1

ちょっとしたヒント:NetConnection => PHPエンコーディングを使用しているため、PHPエンコーダの動作をAMFPHPで確認してください。 – turbosqel

答えて

1

NetConnection.callの動作方法と有効な要求と応答の構築方法については、第4章のAMF0 specsに詳しく説明されています。NetConnection.callには、ヘッダー、RPCメソッド名、要求が成功したか、エラーが発生しました。このため、writeObjectを使用して有効な要求を作成するだけでは使用できません。

AMF0からAMF3への切り替えに関するビットは、すべてのAS3オブジェクトがAMF0のデータを失うことなく書き込まれるわけではないという事実に起因しますが、オリジナルのFlash Playerはすべて本体がAMF0であるとみなします。 AMF3をエンコードに使用するように指定した場合、AMF3モードでwriteObjectを呼び出す前にAMF0〜AMF3マーカー(0x11)を書き出します。

関連する問題