我对Serializable接口的优势有点困惑。 我会进一步解释我的问题。
假设我有一个名为Dog的课程。
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
所以现在如果我需要将其转换为String,我可以覆盖toString方法并使其像
一样@Override
public String toString() {
return name + "=" + age;
}
或创建一个执行此操作的方法。
现在,实现Serializable的做法有何不同?或者是什么让它更好?
感谢您的帮助, BetaNyan。
答案 0 :(得分:0)
Serializable生成用于保存/恢复数据的二进制格式。这与toString()
不同,因为toString()
是用于调试的人(文本)格式,并非必要的可逆性(例如,它可能只是概括了解项目所需的关键信息,并没有自动生成的代码将内容转换回对象)。如果使对象可序列化,则可以使用对象(Input | Output)Stream读取/写入对象。
然而,除了Serializable之外,还有更好的二进制序列化方法,可以与其他语言互操作,并且在版本控制方面有更好的故事。如果您正在考虑保留/传达数据,请查看Protocol Buffers或MessagePack。
答案 1 :(得分:0)
http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html http://www.tutorialspoint.com/java/java_serialization.htm
我建议您查看这些有关序列化的更多信息,但主要的要点是您可以将对象的实例放入文件中供以后使用。这意味着对象的特定实例所特有的任何值和变量都将保存在文件中以供将来使用。
答案 2 :(得分:0)
所以,有两件事:
toString()
toString()
为您提供了按照您希望的方式打印内容的方法。所以,当有人试图打印你的Dog类状态时,他们会看到一些有意义的东西,而不是ObjectName@Hashcode
Serializable
Serializable是一个标记接口,没有可覆盖的方法,但允许您将对象的状态保存在磁盘上。比如,您希望将Dog对象状态保存在驱动器上并将其移植到运行在不同操作系统上的其他网络上,然后您可以使用序列化过程安全地从驱动器中解码对象状态。
toString()
和Serialization
是不同的概念。