Проблема чтения байтового массива в объект после декодирования из строки. - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь сериализовать и десериализовать массив байтов в строку, используя Base64 для as3.

Вот мой код

public function Serialize(vector:Vector.<Action>):String
    {
        var bytes:ByteArray = new ByteArray();
        var serialized:String = "";

        registerClassAlias("Action", Action);

        try { bytes.writeObject(vector); trace("Unserialized bytes:\n" + bytes + "\n"); }
        catch (e:Error) { trace("Writing object Failed!!\n" + e); }

        bytes.position = 0;
        bytes.compress();
        trace("Compressed bytes:\n" + bytes + "\n");

        return Base64.encode(bytes);
    }

public function Deserialize(serializedString:String):Vector.<Action>
    {
        var deserialized:ByteArray = new ByteArray();
        var deserializedObj:Object = new Object();
        var newVector:Vector.<Action> = new Vector.<Action>();

        try { deserialized = Base64.decode(serializedString); trace("Deserialized bytes:\n" + deserialized + "\n"); }
        catch (e:Error) { trace("Decoding Failed!!\n" + e); }

        deserialized.position = 0;
        deserialized.uncompress();
        trace("Uncompressed bytes:\n" + deserialized + "\n");

        try { deserializedObj = deserialized.readObject(); trace("Moving bytes into an object" + deserializedObj); }
        catch (e:Error) { trace("Reading Object Failed!!\n" + e); }

        for each(var a:Action in deserializedObj)
        {
            trace(a);
            newVector.push(a);
        }

        return newVector;
    }

Я проверил это, и сериализация работает нормально, но

Reading Object Failed!!
ArgumentError: Error #1063: Argument count mismatch on System::Action(). Expected 2, got 0.

- это ошибка, которую я получаю после вызова deserializedObj = deserialized.readObject(); Должен ли я получить эту ошибку, если я просто пытаюсь поместить это в объект? Я пока не пытаюсь поместить его в объект класса действия, но если это так, то у получаемого действия нет параметров, которые были изначально внутри.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Похоже, что Action имеет конструктор, который принимает два параметра (без значений по умолчанию). readObject очевидно не может обработать конструирование объектов с конструкторами не по умолчанию.

Измените Action, чтобы его параметры конструктора имели значения по умолчанию, и посмотрите, поможет ли это.

0 голосов
/ 29 июля 2011

Я никогда не видел эту ошибку Система: Действие Единственное, что я вижу, это может быть проблемой.

попробуйте переместить

deserialized.uncompress();

выше

deserialized.position = 0;
...