2010-04-06 6 views
0

J'ai bricolé avec IExternalizable, mais j'ai remarqué un comportement inattendu. J'ai cette classe:Flex: Fuite inattendue avec 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"); 
} 

Mais lorsque je tente de sérialiser cette classe à l'aide de l'AMF et l'envoyer à un serveur distant (via RemoteObject), Charles me montre que la demande ressemble à ceci:
unexpected result http://img.skitch.com/20100406-cjawastycagp1x2chbe76k2suu.png

Mais il semble incorrect que mon objet sérialisé fuit dans le reste de la demande.

Alors, qu'est-ce que je fais de mal? Y a-t-il une partie de la documentation que j'ai manquée?

Répondre

1

Vous codez semble bien, mais vous devez sérialiser en utilisant les méthodes appropriées (writeUTF pour les chaînes, writeInt pour int etc). De toute façon, Charles semble ne pas fonctionner correctement avec les objets implémentant IExternalizable (j'utilise la version 3.4.1), donc vous ne devriez pas vous fier à ce qu'il montre.

Non directement lié à votre question - avez-vous vraiment besoin d'utiliser IExternalizable? Vous allez perdre quelques avantages liés à l'algorithme de compression AMF (sauf si vous n'allez pas implémenter tout cela dans votre méthode writeExternal).

+0

Quel est l'avantage d'utiliser les méthodes de sérialisation «correctes»? Et si vous présentez des affirmations comme «c'est plus efficace», pouvez-vous fournir des preuves à l'appui de la réclamation? –

+0

En outre, quels avantages de compression je perds avec IExternalizable? –

+0

Merci pour le conseil sur Charles, cependant. Il semble que, en raison de la façon dont 'IExternalizable' est implémenté, Charles n'a aucun moyen de savoir où l'objet s'arrête et le reste de la requête continue. –