Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 反序列化向量。<;字符串>;从拜特利_Apache Flex_Actionscript_Air - Fatal编程技术网

Apache flex 反序列化向量。<;字符串>;从拜特利

Apache flex 反序列化向量。<;字符串>;从拜特利,apache-flex,actionscript,air,Apache Flex,Actionscript,Air,我遇到了这样的情况: var vector:Vector.<String> = new Vector.<String>(); vector.push("uno"); vector.push("dos"); vector.push("tres"); var serializer:ByteArray = new ByteArray(); serializer.writeObject(vector); serializer.position = 0; var vector2

我遇到了这样的情况:

var vector:Vector.<String> = new Vector.<String>();
vector.push("uno");
vector.push("dos");
vector.push("tres");

var serializer:ByteArray = new ByteArray();
serializer.writeObject(vector);
serializer.position = 0;

var vector2:Vector.<String> = serializer.readObject();
trace(vector2[0]);
trace(vector2[1]);
trace(vector2[2]);
现在,如果我在声明
vector
变量之前调用
registerClassAlias(“com.some.alias”,String)
,代码将毫无问题地执行

为什么在这种情况下需要调用registerClassAlias()?

writeObject()和readObject()方法分别写入(编码)和返回泛型(非类型化)对象类型的对象

因此,将矢量2作为矢量输入。将导致在将其作为矢量输入时出现错误。甚至根本不输入都可以;在这种情况下,将返回一个对象:

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
var向量:向量新向量()//对象
向量推送('abc');
矢量推力(123);
push({foo:bar});
var序列化程序:ByteArray=newbytearray();
serializer.writeObject(向量);
serializer.position=0;
var vector2:Object=serializer.readObject();//注意:readObject返回一个对象
跟踪('vector2是对象?',vector2是对象)//真的
跟踪('vector2是向量。?',vector2是向量。)//正确,但请参见下文
跟踪(vector2[0],“是字符串吗?”,vector2[0]是字符串)//abc是字符串吗?真的
跟踪(vector2[1],“是数字吗?”,vector2[1]是数字)//123是一个数字吗?true(int和uint是数字)
迹(向量2[2])//[对象]非类型化对象
跟踪('vector2[2].foo=>',vector2[2].foo);//向量2[2]。foo=>bar
跟踪('vector2[2].bar=>',vector2[2].bar);//向量2[2]。条=>未定义
有趣的是,Vector.在读回时也被正确地键入,而所有其他类型都被强制转换为对象。注释/取消注释下面的向量声明,以查看解码后它是如何键入的

//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> );
//输入正确
向量:向量=新向量();
push('abc',123,{foo:'bar});
//向量:向量=新向量();
//矢量推力(123456789);
//而不是泛型对象
//向量:向量=新向量();
//矢量推力(“a”、“b”、“c”);
//向量:向量=新向量();
//push(函数a():*{},函数b():*{},函数c():*{});
//向量:向量=新向量();
//矢量推送(真、假、真);
var序列化程序:ByteArray=newbytearray();
serializer.writeObject(向量);
serializer.position=0;
var vector2:*=serializer.readObject();
跟踪('vector2是对象?',vector2是对象)//真的
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
我不知道为什么数字也会这样,我不太了解序列化…

writeObject()和readObject()方法分别写入(编码)和返回泛型(非类型化)对象类型的对象

因此,将矢量2作为矢量输入。将导致在将其作为矢量输入时出现错误。甚至根本不输入都可以;在这种情况下,将返回一个对象:

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
var向量:向量新向量()//对象
向量推送('abc');
矢量推力(123);
push({foo:bar});
var序列化程序:ByteArray=newbytearray();
serializer.writeObject(向量);
serializer.position=0;
var vector2:Object=serializer.readObject();//注意:readObject返回一个对象
跟踪('vector2是对象?',vector2是对象)//真的
跟踪('vector2是向量。?',vector2是向量。)//正确,但请参见下文
跟踪(vector2[0],“是字符串吗?”,vector2[0]是字符串)//abc是字符串吗?真的
跟踪(vector2[1],“是数字吗?”,vector2[1]是数字)//123是一个数字吗?true(int和uint是数字)
迹(向量2[2])//[对象]非类型化对象
跟踪('vector2[2].foo=>',vector2[2].foo);//向量2[2]。foo=>bar
跟踪('vector2[2].bar=>',vector2[2].bar);//向量2[2]。条=>未定义
有趣的是,Vector.在读回时也被正确地键入,而所有其他类型都被强制转换为对象。注释/取消注释下面的向量声明,以查看解码后它是如何键入的

//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> );
//输入正确
向量:向量=新向量();
push('abc',123,{foo:'bar});
//向量:向量=新向量();
//矢量推力(123456789);
//而不是泛型对象
//向量:向量=新向量();
//矢量推力(“a”、“b”、“c”);
//向量:向量=新向量();
//push(函数a():*{},函数b():*{},函数c():*{});
//向量:向量=新向量();
//矢量推送(真、假、真);
var序列化程序:ByteArray=newbytearray();
serializer.writeObject(向量);
serializer.position=0;
var vector2:*=serializer.readObject();
跟踪('vector2是对象?',vector2是对象)//真的
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);
跟踪('vector2是向量。?',vector2是向量。);

我不知道为什么数字也会这样,虽然我对序列化不太了解…

自从我遇到类似问题以来已经很久了,但是从
ByteArray
反序列化的iirc对象总是作为非类型的
对象返回。在这种情况下,如果没有注册表ClassAlias()
,我认为它无法正常工作。如果您有要[反]序列化的自定义类,可以添加[RemoteClass]以提供所需的类型信息。感谢您的重播。在哪里可以找到有关“iirc对象”的更多信息?在谷歌中找不到任何东西…很抱歉造成混淆,“iirc”=“如果我没记错的话”。你查过和的文件了吗?Jaja。谢谢你对“iirc”的定义。关于这个话题,我会再多搜索一点。谢谢,自从我遇到类似的问题以来,againIt已经很久了,但是iirc反对de