2010-02-10 57 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