我目前不明白为什么我会选择序列化一个对象,而不是只做一个文件输出,然后让一个函数读取该文件。从序列化对象中获得什么?为什么我会序列化一个对象而不是做文件输出?
回答
使用经过W3C认可的数据交换格式,您几乎可以在几乎所有的编程语言中为读者和作者提供几乎全面的支持,从而获得了读取和写入对象数据的行业标准方式。
你的答案比我的好。它应该是第一位的。 – rpax
序列化可以很容易地存储对象 和对象内部的状态(如果它们是Serializable
而不是标记为transient
)。
你的情况好处:
想象一下,你有很多不同的类。也许编码的通用File-to-class
解析器难度比readObject()
当你serialize
的object
,要复制的实际byte
数据在内存中为stream
。当你回传到object
的de-serialize
时,你会得到相同的对象,包括它的内部对象ID,如果你已经将对象的属性写入文件,然后再读入并解释它,则不会得到该ID。
这意味着,如果你serialize
的objects
是reference
相互集合,当你de-serialize
他们,他们将仍然维持其references
给对方。这对调试程序也很好。如果发生异常,您可以在用户计算机上创建内存转储,并且如果它们将其发送给您,则可以直接看到内存中的内容以及可能导致的问题。
它也更容易serialize
复杂object
有许多属性为stream
比它要建立一些string
代表性的数据,你将有回读,分析和构建新的object
它。
真的你得到的是,它更容易/更快,更好的调试。
- 1. C#,为什么XmlSerializer会序列化基础对象而不是接口?
- 2. 为什么JsonConvert不会反序列化这个对象?
- 3. 为什么两个数字对象出现而不是一个?
- 4. 什么是对象图和我如何序列化一个
- 5. 在序列化对象列表时输出id而不是完整对象
- 6. 为什么我可以序列化属性而不是对象本身?
- 7. 为什么我的输出转到cout而不是文件?
- 8. 当序列化对象时,BOOST_SERIALIZATION_NVP会做什么?
- 9. JSON.NET不会反序列化为我的对象,抛出一个异常
- 10. 我想将一个xml文件序列化为java对象
- 11. 如何找出为什么一个对象不能被JSON序列化?
- 12. 序列化对象文件输出为空
- 13. 我序列化了一个C++对象,如何为它分配内存而不知道它是什么类型?
- 14. 序列化对象到一个文件
- 15. 为什么如果我不实现序列化我仍然可以序列化一个对象?
- 16. 为什么我不能序列化一个结构体中的对象?
- 17. 当我使用Spidermonkey时,为什么我的输出是[对象对象]而不是[Id:id_value]
- 18. 为什么我得到[对象对象]而不是JSON?
- 19. 序列化一个对象和反序列化为对象
- 20. 为什么我们不能序列化这些对象?
- 21. 为什么jQuery ajax不能序列化我的对象?
- 22. 获取对象而不是结果,我做错了什么?
- 23. JavaScript:为什么array.push()追加两个对象而不是一个
- 24. 为什么我不能一个输出文件放在VS2015
- 25. 为什么输出2,0而不是2,3?
- 26. 这个程序为什么输出8589934593而不是4294967298?
- 27. 为什么这个程序输出4,而不是3?
- 28. 我什么时候需要序列化一个对象?
- 29. 为什么JSON序列化返回一个部分反序列化的对象?
- 30. 为什么Math是一个对象而String是一个函数?
这些都可以被认为是序列化。你如何坚持/重建对象状态的细节并没有真正定义序列化。例如,可以将对象序列化为YAML,XML或二进制文件,但所有这些都是序列化的形式。这实际上取决于您希望持久化数据的'人类可读'/便携性如何,以及您想花费多少时间在翻译逻辑上。 –