2010-04-06 3 views
0

Я занимаюсь с IExternalizable, но я заметил некоторое неожиданное поведение. У меня есть этот класс:Flex: Неожиданная утечка с помощью RemoteObject + IExternalizable?

public function readExternal(input:IDataInput):void { 
    input.readObject(); 
    input.readObject(); 
    input.readObject(); 
} 

public function writeExternal(output:IDataOutput):void { 
    output.writeObject("first string"); 
    output.writeObject(424242); 
    output.writeObject("second string"); 
} 

Но когда я пытаюсь сериализации этого класса, используя AMF и отправить его на удаленный сервер (через RemoteObject), Чарльз показывает мне, что запрос выглядит следующим образом:
unexpected result http://img.skitch.com/20100406-cjawastycagp1x2chbe76k2suu.png

Но кажется неправильным, что мой сериализованный объект просачивается в остальную часть запроса.

Итак, что я делаю неправильно? Есть ли какая-то часть документации, которую я пропустил?

ответ

1

Вы код кажется прекрасным, однако вы должны сериализовать, используя соответствующие методы (writeUTF для строк, writeInt для int и т. Д.). Во всяком случае, Чарльз, похоже, не работает должным образом с объектами, использующими IExternalizable (я использую версию 3.4.1), поэтому вы не должны полагаться на то, что он показывает.

Непосредственно связано с вашим вопросом - действительно ли вам нужно использовать IExternalizable? Вы потеряете некоторые преимущества, связанные с алгоритмом сжатия AMF (если вы не собираетесь реализовать все это в своем методе writeExternal).

+0

В чем преимущество использования «правильных» методов сериализации? И если вы собираетесь заявлять, что «это более эффективно», можете ли вы предоставить доказательства для поддержки претензии? –

+0

Кроме того, какие преимущества сжатия я теряю с помощью IExternalizable? –

+0

Спасибо за отзыв о Чарльзу. Похоже, благодаря методу «IExternalizable» Чарльз не знает, где останавливается объект, и остальная часть запроса продолжается. –

Смежные вопросы