2010-02-10 4 views
2

Je suis en train de sérialiser & déserialiser Vector. en utilisant ByteArray Voici mon code:AS3: Impossible de désérialiser l'objet de ByteArray .. Erreur # 2006

public static function serializeToString(value:Object):String{ 

    if(value==null){     
     throw new Error("null isn't a legal serialization candidate");    
    } 

    var bytes:ByteArray = new ByteArray();   
    bytes.writeObject(value);   
    bytes.position = 0;   

    return Base64.encodeByteArray(bytes).toString();   
} 

public static function readObjectFromStringBytes(value:String):Object{   

    var result:ByteArray= Base64.decodeToByteArray(value); 
    result.position=0;   
    return result.readObject();   
} 

Peu importe ce que je fais, je continue à avoir cette erreur:

RangeError: Erreur # 2006: L'indice fourni est hors des limites. à flash.utils :: ByteArray/readObject()

Je dipertly cherche une solution ..

Merci à l'avance Sameer

Répondre

0

Essayez de vous débarrasser des .position = 0 lignes. Ils ne sont pas nécessaires et le second peut être ce qui cause votre problème. Notez également que toString() n'est pas nécessaire, car encodeByteArray renvoie déjà une chaîne.

+0

Erreur # 2006 toujours là, la chose étrange est que le problème se produit seulement lorsque le swf qui implémente la sérialisation est chargé dans un autre swf (le chargeur) Mais, quand j'utilise le serializer swf directement (sans être chargé d'un loader swf) le problème disparait! j'appelle le desrialzer quand j'appuie sur un bouton, ce qui signifie que je suis 100% sûr que le swf sérialiseur est chargé completly La chaîne Je suis désérialisation est stockée dans le fichier SWF chargé .. Alors, j'espère que cela vous donne un indice .. –

+0

Je ne sais pas pourquoi il pourrait échouer, désolé. Peut-être que Base64 cause les problèmes? Il semble moins probable qu'une classe intégrée très utilisée (ByteArray) ait un bug aussi énorme. Là encore, peut-être que cette erreur se produit uniquement dans des circonstances uniques à votre application, ou est causée par un code sans rapport ailleurs. Une fois, j'ai eu une erreur d'affichage provoquée par un bogue dans une classe complètement indépendante. C'était difficile à trouver parce que la classe buggy fonctionnait bien (quand ça n'aurait pas dû être) pendant des jours avant qu'elle ne commence à causer des erreurs (et je n'avais pas modifié la classe en question depuis plusieurs jours). – Cameron

1

J'ai trouvé la raison de problème après plusieurs jours de frustration ..

Le chargeur SWF publié pour lecteur 9, le fichier SWF contenu publié pour le joueur 10, je simplement republié le chargeur pour 10 joueurs, et l'erreur # 2006 disparu du SWF chargé

Ce que je me demande, c'est que le contenu utilise Vector. type, qui est la caractéristique du lecteur 10, comment se fait-il correctement dans un chargeur plus ancien?! Pourquoi il n'y a pas de descriptif concernant les différentes versions de joueurs?

0

Si vous souhaitez envoyer ou recevoir le graphe d'objet sérialisé au code côté serveur sans avoir à convertir d'abord en chaîne, voir this link.

+0

Si, en outre, vous souhaitez sérialiser/désérialiser le graphe d'objet en C# côté serveur, consultez ce lien pour savoir comment utiliser FlourineFx pour accomplir ceci. http://www.eggheadcafe.com/software/aspnet/29237818/amf3-serializationdeseri.aspx – bob31334

Questions connexes