Есть ли инструмент для записи состояния объектов на диск? - PullRequest
0 голосов
/ 05 марта 2009

Что я хотел бы сделать, это записать объект, который находится в памяти, на диск для целей тестирования. Поскольку для перехода в это состояние требуется много шагов, я хотел бы захватить его один раз и пропустить шаги.

Я понимаю, что могу смоделировать эти объекты вручную, но лучше "записать" и "воспроизвести" реальные объекты, потому что я думаю, что это будет быстрее.

Редактировать: Вопрос касается всего этого процесса, а не только сериализации объекта (также файловых операций), и я надеюсь, что существует инструмент для выполнения этого процесса на стандартных объектах.

Я заинтересован в ActionScript специально для этого приложения, но ...

  • Есть ли примеры этого в других языки программирования?

  • Как этот процесс обычно называют?

  • Как это будет сделано в Actionscript

Edit:

  • Существуют ли инструменты, которые делают сериализацию и операции с файлами автоматическими (т.е. без специальных интерфейсов)?

  • Кто-нибудь еще найдет предложенный инструмент полезным (если он не существует)?

Используйте случай, о котором я думаю:

ObjectSaver.save(objZombie,"zombie"); //save the object
var zombieClone:Zombie = ObjectSaver.get("zombie"); // get the object

и расположение диска где-то настраивается.

Ответы [ 9 ]

3 голосов
/ 05 марта 2009

Преобразование объектов в байты (чтобы их можно было сохранить на диск или передать по сети и т. Д.) Называется сериализация .

Но в вашем случае я не думаю, что сериализация настолько полезна для тестирования. Когда тест создает все свои тестовые данные каждый раз, когда тест выполняется, вы всегда можете верить, что тестовые данные соответствуют вашим ожиданиям и что нет побочных эффектов, вытекающих из предыдущих тестовых прогонов.

2 голосов
/ 05 марта 2009

Я задавал тот же вопрос для Flex несколько дней назад. ActionScript, в частности, не особо поддерживает сериализацию, хотя библиотеки JSON, упомянутые в одном из ответов, выглядели многообещающими. Сериализация объектов Flex для сохранения состояния приложения восстановления

1 голос
/ 05 марта 2009

Раньше это называлось «контрольная точка» (хотя обычно это означает сохранение состояния всей системы). Рассматривали ли вы сериализацию вашего объекта в некоторый промежуточный формат, а затем создание конструктора, который может принимать объект в этом формате и заново создавать объект на основе этого? Это может быть более простой путь.

1 голос
/ 05 марта 2009

Это называется Сериализация

Perl использует для этого модуль Storable, я не уверен насчет Actionscript.

1 голос
/ 05 марта 2009

Как обычно называют этот процесс?

  • Сериализация / десериализация
  • Маршаллинг / демаршаллинг
  • Раздувание / раздувание
1 голос
/ 05 марта 2009

Я думаю, вы говорите о "сериализации объектов".

0 голосов
/ 02 мая 2009

Если вы используете AIR, вы можете хранить объекты во включенной локальной базе данных.

Вот простой пример с использованием локальной базы данных SQLite на сайте Adobe и дополнительной информации о том, как данные хранятся в базе данных .

0 голосов
/ 28 апреля 2009

Самое близкое, к чему я пришел, это использование appcorelib ClassUtil для создания объектов XML из существующих объектов (сохранение XML вручную) и создания объектов из этого XML. Для объектов с массивами пользовательских типов требуется правильно настроить теги метаданных ArrayElementType и параметры компилятора, как описано в документации.

ClassUtil.createXMLfromObject(obj);
CreateClassFromXMLObject(obj,targetClass);
0 голосов
/ 07 марта 2009

Проверьте интерфейс flash.utils.IExternalizable . Он может использоваться для сериализации объектов ActionScript в ByteArray. Полученные данные можно легко записать на диск или использовать для клонирования объектов.

Обратите внимание, что это не "автоматически". Вы должны вручную реализовать интерфейс и написать функции readExternal() и writeExternal() для каждого класса, который вы хотите сериализовать. Вам будет сложно найти способ сериализации пользовательских классов «автоматически», потому что private члены доступны только внутри самого класса. Вам нужно будет сделать все необходимое для сериализации public, если вы хотите создать метод внешней сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...