我想要做的是将内存中的对象捕获到磁盘以进行测试。由于进入此状态需要很多步骤,因此我想捕获一次并跳过这些步骤。
我意识到我可以手动模拟这些对象,但我宁愿“记录”和“重放”真实对象,因为我认为这会更快。
编辑:问题在于整个过程,而不仅仅是对象的序列化(也包括文件操作),我希望有一个工具可以在标准对象上执行此过程。
我对Actionscript感兴趣,因为这是应用程序,但是......
在其他方面是否有这样的例子 编程语言?
这个过程通常称为什么?
如何做到这一点 动作
编辑:
是否有自动进行序列化和文件操作的工具(即没有特殊的接口)?
是否有其他人会发现建议的工具有用(如果它不存在)?
使用我的想法:
ObjectSaver.save(objZombie,"zombie"); //save the object
var zombieClone:Zombie = ObjectSaver.get("zombie"); // get the object
并且可以在某处配置磁盘位置。
答案 0 :(得分:3)
将对象转换为字节(以便将它们保存到磁盘或通过网络传输等)称为serialization。
但在您的情况下,我不认为序列化对于测试目的是有用的。当测试在每次运行测试时创建所有测试数据时,您始终可以相信测试数据是您期望的,并且以前的测试运行没有任何副作用泄漏。
答案 1 :(得分:2)
几天前我问过Flex的同样问题。虽然其中一个响应中提到的JSON库看起来很有前途,但ActionScript特别对序列化没有太多支持。 Serialize Flex Objects to Save Restore Application State
答案 2 :(得分:1)
我认为你在谈论“对象序列化”。
答案 3 :(得分:1)
这个过程通常称为什么?
答案 4 :(得分:1)
它被称为Serialization
Perl使用Storable模块执行此操作,我不确定Actionscript。
答案 5 :(得分:1)
这曾经被称为“检查点”(尽管这通常意味着保存整个系统的状态)。您是否考虑将对象序列化为某种中间格式,然后创建一个可以接受该格式的对象并根据该对象重新创建对象的构造函数?这可能是一种更直接的方式。
答案 6 :(得分:0)
查看flash.utils.IExternalizable界面。它可用于将ActionScript对象序列化为ByteArray。生成的数据可以很容易地写入磁盘或用于克隆对象。
请注意,这不是“自动”。您必须手动实现该接口,并为要序列化的每个类编写readExternal()
和writeExternal()
函数。您将很难找到一种“自动”序列化自定义类的方法,因为private
成员只能在类本身中访问。如果要创建外部序列化方法,则需要将所有需要序列化的内容public
。
答案 7 :(得分:0)
我最接近的是使用appcorelib ClassUtil从现有对象创建XML对象(手动保存xml)并从此xml创建对象。对于具有自定义类型数组的对象,它需要按照文档中的描述正确配置ArrayElementType元数据标记和编译器选项。
ClassUtil.createXMLfromObject(obj);
CreateClassFromXMLObject(obj,targetClass);
答案 8 :(得分:0)
如果您使用的是AIR,则可以将对象存储在包含的本地数据库中。
这是Adobe网站上的simple example using local SQLite database和more info on how data is stored in the database。