2009-03-05 6 views
0

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

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

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

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

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

  • Что называется этот процесс?

  • Как это сделать в Действиях?

Edit:

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

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

Используйте случай того, что я имею в виду:

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

и место на диске быть настраиваемым где-то.

+0

Пожалуйста, покажите несколько примеров тестовых примеров, которые вы хотите написать. Например, некоторый псевдокод того, как вы ожидаете, что «идеальная» структура будет соответствовать вашим потребностям. –

+0

Я, должно быть, добавил указанный выше код так же, как вы прокомментировали. – Brandon

+0

Этот код выглядит как любая структура сериализации. Написание файла на некоторое место на диске - это простой код клея. Вопрос в том, как вы будете использовать эти методы? Например, когда и как создается «objZombie», и когда и как используется «zombieClone»? –

ответ

3

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

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

+0

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

1

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

1

Что называется этот процесс?

  • Сериализация/десериализации
  • сортировочных/демаршаллинга
  • сдувания/надувания
1

Это называется Serialization

Perl использует убирающийся в модуль, чтобы сделать это, я не обязательно о ActionScript.

2

Я задал тот же вопрос для Flex несколько дней назад. ActionScript специально не поддерживает сериализацию, хотя библиотеки JSON, упомянутые в одном из ответов, выглядели многообещающими. Serialize Flex Objects to Save Restore Application State

+0

Прохладный, спасибо, я попробую пакет сериализации. – Brandon

+0

У меня было несколько проблем с работой пакета JSON (продолжалось получение SO-ошибок), поэтому я продолжил хранение/извлечение объектов через XML.Я бы рекомендовал использовать XML для хранения объектов, если вы не можете заставить пакет JSON работать - это довольно интуитивно. – bedwyr

1

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

0

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

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

0

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

ClassUtil.createXMLfromObject(obj); 
CreateClassFromXMLObject(obj,targetClass); 
Смежные вопросы