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

时间:2011-10-10 20:33:41

标签: 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 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 / _model.writeExternal()如何能够序列化,因为它需要以某种方式知道新的序列化操作即将开始。如果它不知道,它将无法确定哪些对象实例左侧序列化

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

请解释一下,我缺少什么。

我很乐意从共享对象中读取原始ByteArray并将其写入文件。不幸的是,在我的案例mySo.data.model中,我找不到从SharedObject检索某个属性的ByteArray的方法。 我的问题与这个问题松散相关:Why does delete( DictionaryInstance[ key ] ); fail?

1 个答案:

答案 0 :(得分:1)

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

byteArray.writeObject(myObject);
byteArray.position = 0;
readValue = byteArray.readObject();

另外,我认为你不应该担心字节顺序,我认为默认是大端,无论如何。

所以,对于你的情况,我认为你需要类似的东西:

fileStream.writeObject(myObject)

而不是:

myObject.writeExternal(_prefsStream);

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