目前,我将模型对象序列化为 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?
答案 0 :(得分:1)
我曾经不得不在我构建的外化框架上执行单元测试,这就是我做到的:
byteArray.writeObject(myObject);
byteArray.position = 0;
readValue = byteArray.readObject();
另外,我认为你不应该担心字节顺序,我认为默认是大端,无论如何。
所以,对于你的情况,我认为你需要类似的东西:
fileStream.writeObject(myObject)
而不是:
myObject.writeExternal(_prefsStream);
运行时应自动调用模型上的writeExternal
。