AS3: Невозможно десериализовать объект из ByteArray .. Ошибка № 2006 - PullRequest
2 голосов
/ 10 февраля 2010

Я пытаюсь сериализовать и десериализовать Vector. используя ByteArray Вот мой код:

 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 ()

Я безумно ищу решение ..

Заранее спасибо Самир

Ответы [ 3 ]

1 голос
/ 14 февраля 2010

Я нашел причину проблемы после нескольких дней разочарования ..

Загрузчик SWF опубликован для игрока 9, контент SWF опубликован для игрока 10, Я просто переиздал загрузчик для игрока 10, и ошибка № 2006 исчезла из загруженного SWF

Что меня интересует, так это то, что контент использует Vector. тип, который является особенностью игрока 10, как получилось, что в старом загрузчике все правильно? Почему нет описания относительно разных версий плеера ??

0 голосов
/ 25 февраля 2010

Если вы хотите отправить или получить сериализованный граф объектов в код на стороне сервера без предварительного преобразования в строку, см. эту ссылку .

0 голосов
/ 10 февраля 2010

Попробуйте избавиться от .position = 0 строк. Они не нужны, и второй может быть причиной вашей проблемы. Также обратите внимание, что toString() не требуется, поскольку encodeByteArray уже возвращает строку.

...