.class文件为每种类型的对象提供蓝色打印,Java具有丰富的功能来提取对象的属性,包括其所有状态。 那么为什么我们仍然需要实现可序列化,我们是否可以在给定.class文件的情况下自动序列化?是否可以自动序列化知道.class文件的对象
回答
Serializable
接口是一个标记接口,它在它没有方法或字段。它只是由我们可能想要序列化的对象实现。
而且序列化是一个昂贵的事,因为(从有效的Java第二版两者):
实现Serializable接口的主要成本是它降低了灵活性 改变类的实现,一旦它已经释放。当 类实现Serializable时,其字节流编码(或序列化形式) 成为其导出的API的一部分。一旦广泛分发课程,您通常需要 才能永久支持序列化表单,就像您要求 支持导出的API的所有其他部分一样。
实施Serializable的第二个成本是它增加了错误和安全漏洞的可能性 。
实现Serializable接口的第三个代价是增加了与释放类的新版本相关的测试 负担。当修改可序列化的 类时,检查是否可以序列化新版本的 中的实例并将其反序列化为旧版本,反之亦然。
正如您所提到的,“当类实现Serializable时,其字节流编码(或序列化形式)成为其导出的API的一部分”,为什么java不能通过查看.class文件生成唯一的字节顺序?我问这个问题的原因是,如果java可以,他们会附加一个.class文件并自动序列化(我知道给一个.class文件不会很好,但至少它是一个选择)。在我看来,它仍然存在一些微妙的问题。 – 2012-02-28 18:40:16
@Helin Wang:默认情况下,它可以并且自动序列化一个类实例,但是如果你改变这个类,那么新版本就无法读取旧的那个。如果你自己处理这个问题,你可以输入版本号,或者以其他方式解码旧版本的数据。 – RalphChapin 2012-02-28 20:09:55
可序列化只是一个标记接口;你不需要提供任何实现。 Java将提供一个适用于大多数情况的合理的默认实现。在Java
鉴于一个对象可以引用一堆其他对象,序列化该类会变得非常有趣。序列化一个对象可能导致成千上万的对象被序列化。结果可以毫不费力和出色,但99.9%的时间您需要控制和限制至少一部分操作。当您将类实例移到长期打开的套接字上时,尤其如此。
因此,标记一个类“可序列化”是指出你已经想通了所有的分支。这些可能是微不足道的,也可能是巨大而复杂的。但要小心:向流中写入一个类实例可以将导致序列化已知Universe的一半。
- 1. 是否可以知道是否使用自动化工具
- 2. 是否可以将java类对象序列化为类文件?
- 3. 可序列化对象的组合是否也可序列化?
- 4. 是否可以序列化/反序列化dojo小部件对象?
- 5. 想知道Java对象 - json序列化
- 6. 想知道verifone终端的自动化是否可行?
- 7. 是否有可以序列化Proxy对象的JSON库?
- 8. 是否可以“减少”Json.NET的对象序列化?
- 9. 是否可以知道添加对象的数组(或数组)?
- 10. 是否可以序列化一个LINQ对象?
- 11. JQuery UI:是否可以知道对象已被删除?
- 12. 在Python中,如何知道对象是否可以比较?
- 13. 我如何知道对象是否可以被弱引用?
- 14. 我可以知道AppleScript对象是否具有某个属性?
- 15. 自定义对象是可序列化但不可反序列化的
- 16. 序列化未知对象
- 17. Android上下文对象是否可序列化?
- 18. 文件对象序列化
- 19. 当你知道它是名字时,是否可以用Java获得原始类型的Class对象?
- 20. Singleton Class Vs序列化对象,CSharp
- 21. 与自动调节我想知道是否有以下几列
- 22. 对象是否可以订阅自己的通知?
- 23. 对象是否可以知道从哪个对象调用其方法?
- 24. 是否有可能知道serialVersionUID是否自动生成?
- 25. Android:如何知道应用程序是否可以启动
- 26. linqtosql对象是可序列化的吗?
- 27. @class我可以知道这个
- 28. 对象是否可以知道它是一个字段的类的名称?
- 29. PHP是否序列化对象方法?
- 30. 是否可以自动化Gsutil登录?
允许一个类被序列化并不总是可取的。一个例子是安全性。如果对象的实例包含密码,我们可能不希望将其写入磁盘。 – Asaph 2012-02-28 17:52:28