2010-02-10 56 views
2

我想序列化&反序列化Vector。使用的ByteArray 這裏是我的代碼:AS3:無法從ByteArray反序列化對象..錯誤#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();   
} 

不管我做什麼,我一直有這個錯誤:

的RangeError:錯誤#2006:提供的索引超出範圍。 在flash.utils ByteArray的:: /的readObject()提前

我dipertly尋找一個解決方案..

感謝 長Sameer

回答

0

儘量擺脫.position = 0線。他們沒有必要,第二個可能是什麼導致你的問題。另請注意,toString()是不必要的,因爲encodeByteArray已經返回一個字符串。

+0

錯誤#2006仍然存在,奇怪的是,只有當實現序列化的SWF被加載到另一個SWF(加載程序)時纔會出現問題。但是,當我直接使用序列化器SWF(不從裝載機瑞士法郎)的問題消失! 我叫desrialzer當我按下一個按鈕,這意味着我可以肯定的是,串行SWF被完全地加載 我反序列化存儲在加載的SWF中的字符串.. 所以100%,我希望這給你一個線索.. – 2010-02-11 05:39:49

+0

我不知道爲什麼它可能會失敗,對不起。也許Base64導致問題?一個高度使用的內建類(ByteArray)似乎不太可能具有如此巨大的錯誤。然後再次,也許這個錯誤只發生在您的應用程序特有的情況下,或者是由其他地方的無關代碼引起的。我曾經在一個完全無關的課堂上發現了一個錯誤,導致了一個錯誤。這很難找到,因爲在開始導致錯誤之前的幾天,bug類已經正常工作(當它不應該是這樣)時(並且我沒有修改有問題的類幾天)。 – Cameron 2010-02-12 20:58:03

1

我發現這個問題的原因無奈天后..

公佈,供玩家9裝載機SWF,內容SWF公佈播放器10, 我只是轉載了播放器10裝載機,以及錯誤#2006年從加載的SWF中消失

我想知道的是,內容使用Vector。類型,這是玩家10的功能, 它是如何在舊的裝載機內正確播放的!爲什麼沒有關於不同播放器版本的描述?

0

如果您希望將序列化對象圖發送或接收到服務器端代碼而不先轉換爲字符串,請參見this link

+0

如果您想進一步將服務器端C#中的對象圖序列化或反序列化,請參閱此鏈接以瞭解如何使用FlourineFx來完成此操作。 http://www.eggheadcafe.com/software/aspnet/29237818/amf3-serializationdeseri.aspx – bob31334 2010-02-25 20:57:17