Flex: непредвиденная утечка с RemoteObject + IExternalizable?

Я возился с 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), Чарльз показывает мне, что запрос выглядит так:
http://img.skitch.com/20100406-cjawastycagp1x2chbe76k2suu.png

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

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


person David Wolever    schedule 06.04.2010    source источник


Ответы (1)


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

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

person Cornel Creanga    schedule 06.04.2010
comment
В чем преимущество использования правильных методов сериализации? И если вы собираетесь делать заявления о том, что это более эффективно, можете ли вы предоставить доказательства в поддержку этого утверждения? - person David Wolever; 06.04.2010
comment
Кроме того, какие преимущества сжатия я теряю с IExternalizable? - person David Wolever; 06.04.2010
comment
Но спасибо за подсказку о Чарльзе. Похоже, что из-за того, как реализован IExternalizable, Чарльз не может знать, где останавливается объект, а остальная часть запроса продолжается. - person David Wolever; 06.04.2010
comment
По поводу методов сериализации - на мой взгляд код выглядит лучше. Я предполагаю также некоторые небольшие улучшения по сравнению с readObject, но я еще не смотрел исходный код FP. - person Cornel Creanga; 06.04.2010
comment
Преимущества связаны с размером пакета AMF. Алгоритм сериализации по умолчанию способен обнаруживать повторяющиеся строки и объекты и использовать ссылки, когда объекты снова обнаруживаются в потоке. Если вы используете собственную сериализацию, вы потеряете это преимущество. Некоторое время назад я написал сообщение в блоге об этом cornelcreanga.com. /2009/09/blazeds-amf-and-read-only-properties - person Cornel Creanga; 06.04.2010