Сериализация в AMF точно так же, как в NetConnection - PullRequest
0 голосов
/ 15 марта 2012

Я хочу сериализовать объект в AMF, и я хочу, чтобы результат был точно таким же, как если бы он был сериализован NetConnection.call ().Итак, я использую ByteArray.writeObject (), и выходные байты обычно совпадают с байтами, отправленными NetConnection.call (), но иногда пара байтов отличается.

Я нашел это в спецификации AMF3: "Обратите внимание, что ByteArray.writeObject использует одну версию AMF для кодирования всего объекта. В отличие от NetConnection, ByteArray не начинается с AMF 0 и переключается на AMF 3 (со свойством objectEncoding, установленным в AMF 3). "Это объясняет эти различия.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 22 марта 2012

Как работает NetConnection.call и как создавать допустимые запросы и ответы, подробно описано в AMF0 specs в разделе 4. NetConnection.call имеет некоторые дополнительные функции, такие как заголовки, метод RPC имя, и был ли запрос успешным или столкнулся с ошибкой. Вот почему вы не можете просто использовать writeObject для создания правильного запроса.

Немного о переключении с AMF0 на AMF3 связано с тем, что не каждый объект AS3 может быть записан без потери данных в AMF0, но все оригинальные проигрыватели Flash Player предполагали, что тело будет в AMF0. Случается так, что во время кодирования, если вы указали, что хотите использовать AMF3 для кодирования, он записывает маркер AMF0-to-AMF3 (0x11) перед вызовом writeObject в режиме AMF3.

...