методы writeObject () и readObject () соответственно записывают (кодируют) и возвращают универсальные (нетипизированные) объекты типизированные объекты.
, поэтому введите ваш vector2 как вектор. вызовет ошибку, полученную при вводе его в качестве вектора. или даже вообще не печатая, должно работать;в этом случае будет возвращен объект:
var vector:Vector.<Object> = new Vector.<Object>();//Object
vector.push( 'abc' );
vector.push( 123 );
vector.push( { foo:"bar" } );
var serializer:ByteArray = new ByteArray();
serializer.writeObject(vector);
serializer.position = 0;
var vector2:Object = serializer.readObject();// NB: readObject returns an Object
trace( 'vector2 is a Object ?', vector2 is Object );//true
trace( 'vector2 is a Vector.<Object> ?', vector2 is Vector.<Object> );//true but see below
trace( vector2[0], 'is a String ?', vector2[0] is String );//abc is a String ? true
trace( vector2[1], 'is a Number ?', vector2[1] is Number );//123 is a Number ? true ( int and uints are Number )
trace( vector2[2] );//[object Object] untyped object
trace( 'vector2[2].foo => ', vector2[2].foo );// vector2[2].foo => bar
trace( 'vector2[2].bar => ', vector2[2].bar );// vector2[2].bar => undefined
забавно то, что вектор. также правильно набирается обратно при обратном чтении, в то время как все другие типы сбоев преобразуются как объекты, комментирующие / раскомментирующие векторнижеприведенные объявления, чтобы увидеть, как он печатается после декодирования.
//correctly typed
var vector:Vector.<Object> = new Vector.<Object>();
vector.push( 'abc', 123, { foo:"bar" } );
//var vector:Vector.<Number> = new Vector.<Number>();
//vector.push( 123, 456, 789 );
//generic Objects instead
//var vector:Vector.<String> = new Vector.<String>();
//vector.push( "a", "b", "c" );
//var vector:Vector.<Function> = new Vector.<Function>();
//vector.push( function a():*{}, function b():*{}, function c():*{} );
//var vector:Vector.<Boolean> = new Vector.<Boolean>();
//vector.push( true, false, true );
var serializer:ByteArray = new ByteArray();
serializer.writeObject(vector);
serializer.position = 0;
var vector2:* = serializer.readObject();
trace( 'vector2 is a Object ?', vector2 is Object );//true
trace( 'vector2 is a Vector.<Object> ?', vector2 is Vector.<Object> );
trace( 'vector2 is a Vector.<Number> ?', vector2 is Vector.<Number> );
trace( 'vector2 is a Vector.<String> ?', vector2 is Vector.<String> );
trace( 'vector2 is a Vector.<Function> ?', vector2 is Vector.<Function> );
trace( 'vector2 is a Vector.<Boolean> ?', vector2 is Vector.<Boolean> );
Я не знаю точно, почему это делают и Numbers, хотя я не знаю много о сериализации ...