Actionscript 3 如何使对象网络序列化为文件,而不是SharedObject?

Actionscript 3 如何使对象网络序列化为文件,而不是SharedObject?,actionscript-3,actionscript,flash-builder,flexbuilder,Actionscript 3,Actionscript,Flash Builder,Flexbuilder,目前,我确实将我的模型对象序列化到SharedObject实例: try { var mySo:SharedObject = SharedObject.getLocal("sig"); mySo.clear(); mySo.data.model = _model; mySo.flush(); } catch ( e:Error ) { Alert.show( 'Leider konnte kein Modell geladen wer

目前,我确实将我的模型对象序列化到SharedObject实例

 try {

     var mySo:SharedObject = SharedObject.getLocal("sig");

     mySo.clear();
     mySo.data.model = _model;
     mySo.flush();

  } catch ( e:Error ) {

    Alert.show( 'Leider konnte kein Modell geladen werden.' );

  }
同样,我使用SharedObject实例加载保存的模型。效果很好

最后,我想将它序列化为一个文件,但失败了。以下是如何:

 var fp: File = File.applicationStorageDirectory;

 fp = fp.resolvePath( PREFS_FILENAME );

 var    _prefsStream:FileStream;
 _prefsStream = new FileStream();
 _prefsStream.open( fp, FileMode.WRITE );
 _prefsStream.endian = Endian.BIG_ENDIAN;

_model.writeExternal( _prefsStream );
_prefsStream.close();
补充读取操作突然中断并报告丢失的字节

事实上,我无法想象FileStream/\u model.writeExternal()是如何序列化的,因为它需要知道一个新的序列化操作即将开始。如果它不知道,它将无法确定哪些对象实例是要序列化的

因此,我认为我的概念是完全错误的,或者我错过了如何初始化序列化操作

请解释一下,我遗漏了什么。

我很乐意从共享对象中读取原始字节数组并将其写入文件。不幸的是,我没有找到从SharedObject检索某个属性的ByteArray的方法,在我的例子中是
mySo.data.model

我的问题与这一点关系不大:

我曾经不得不对我构建的外部化框架执行单元测试,我就是这样做的:

byteArray.writeObject(myObject);
byteArray.position = 0;
readValue = byteArray.readObject();
另外,我认为您不必担心字节顺序,我认为默认值是big-endian

因此,就你的情况而言,我认为你需要:

fileStream.writeObject(myObject)
与之相反:

myObject.writeExternal(_prefsStream);

运行时应自动在模型上调用
writeExternal

关于字节顺序:希望确保代码跨平台。只是为了确定;-)啊,writeObject()可能是关键点!让我看看。会回来的…非常感谢!很好的提示!好的,writeObject()似乎准备/维护已序列化对象实例的列表以及所有其他的神奇功能。不过:writeObject()如何知道新的序列化操作刚刚开始?我的意思是,它如何知道它需要保存所有可访问的对象实例?它在对象树上爬行。例如,对
writeObject
的每次调用都会执行一个测试,以查看对象是否实现了
IDataOutput
IExternalizable
。如果是这样,它将调用对象上的
writeExternal
,使其有机会序列化自身。如果不是,它会尝试尽可能地序列化它(使用公共属性等),或者如果它是一个简单的对象(即字符串、数字、对象、数组等),它只会调用这些方法来序列化它。我一直在与
IExternalizable
斗争,但一旦掌握了窍门,就可以做一些非常酷的事情。而且,如果一个自定义类序列化另一个自定义类,它只会重复并不断爬树,直到整个树被序列化。Type。经验法则:要序列化,请实现writeExternal()和readExternal()方法:在这些例程中,如果要向序列化目标/源写入或从序列化目标/源读取,请始终使用writeObject()和readObject()。