Как заставить объектную сеть сериализоваться в файл, а не в SharedObject? - PullRequest
0 голосов
/ 11 октября 2011

В настоящее время я сериализую свой объект модели в экземпляр 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 из общего объекта и записать егов файл.К сожалению, я не нашел метод для извлечения из SharedObject ByteArray определенного свойства, в моем случае mySo.data.model.Мой вопрос слабо связан с этим: Почему удалить (DictionaryInstance [ключ]);потерпеть неудачу?

1 Ответ

1 голос
/ 11 октября 2011

Мне когда-то приходилось выполнять модульные тесты на построенной мной платформе внешнего доступа, и вот как я это сделал:

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

Кроме того, я не думаю, что вам следует беспокоиться о порядке следования байтов, я думаю, что по умолчанию используется big endian.

Итак, для вашего случая, я думаю, вам нужно что-то вроде:

fileStream.writeObject(myObject)

вместо:

myObject.writeExternal(_prefsStream);

Среда выполнения должна автоматически вызывать writeExternal в вашей модели.

...