AS3自定义对象到ByteArray然后到自定义对象

kor*_*esh 6 bytearray object actionscript-3

读取自定义对象的bytearray时遇到问题.任何帮助表示赞赏

public class CustomObject extends Object {
public function CustomObject() {
public var _x:Number =  100
public var _y:Number = 10
public var _z:Number  = 60
}
}

var cObj:CustomObject = new CustomObject()
var bytes:ByteArray = new ByteArray()
bytes.writeObject(cObj)
bytes.compress()

//read
try { bytes.uncompress() } catch (e:Error) { }
var obj:CustomObject = bytes.readObject() as CustomObject

trace(obj) // null why?!
trace(obj._z) // Obviously - TypeError: Error #1009: Cannot access a property or method of a null object reference. 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ade 12

您要做的是使用registerClassAlias方法将类型信息与数据一起注册.这样Flash就会知道如何序列化/反序列化你的对象.以下是Adobe 文档中的一些示例代码:

registerClassAlias("com.example.eg", ExampleClass);
var eg1:ExampleClass = new ExampleClass();
var ba:ByteArray = new ByteArray();
ba.writeObject(eg1);
ba.position = 0;
var eg2:* = ba.readObject();
trace(eg2 is ExampleClass); // true
Run Code Online (Sandbox Code Playgroud)

应该注意,必须为要保存的类型信息注册所有应序列化的类型.因此,如果您的类型引用了另一种类型,那么它也必须注册.

  • 并不是的.它确实存储了有关数据类型的信息,但效率并不高.它并没有真正影响处理这么多.它用于在AMF协议中存储对象,AMF协议广泛用于Flash平台中的数据传输.除了手动存储类型信息并提供从原始对象数据到特定类型的手动转换之外,这是您唯一的选择,它并不坏. (2认同)