public class Contact implements Serializable {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Serializable
界面? 答案 0 :(得分:141)
来自What's this "serialization" thing all about?:
它可以让你拍摄一个物体或一组 对象,将它们放在磁盘上或发送 他们通过有线或无线 运输机制,然后, 也许在另一台电脑上,反过来 过程:复活原件 (多个)对象。基本机制是 将对象展平成一个 一维比特流,以及 将那些比特流转回 原始对象。
就像星际迷航中的转运者一样 这都是关于服用的东西 复杂并将其变成一个单位 1和0的序列,然后采取 1s和0s的序列(可能是 在另一个地方,可能在另一个地方 时间)和重建原始 复杂的“东西。”
因此,当您需要存储对象的副本,将它们发送到在同一系统或网络上运行的另一个进程时,实现Serializable
接口。
因为您想存储或发送对象。
它使存储和发送对象变得容易。它与安全无关。
答案 1 :(得分:41)
如果希望能够将类的实例转换为一系列字节,或者当您认为Serializable
对象可能引用您的实例时,请实现Serializable
接口类。
Serializable
类在您想要保留它们的实例或通过网络发送它们时非常有用。
可以轻松传输Serializable
类的实例。但是,序列化确实会带来一些安全后果。阅读Joshua Bloch的“Effective Java”。
答案 2 :(得分:9)
这个问题的答案也许令人惊讶,从不,或者更现实的是,仅当您被迫与遗留代码实现互操作性时。这是Joshua Bloch在Effective Java, 3rd Edition中的建议:
没有理由在您编写的任何新系统中使用Java序列化
Oracle's chief architect, Mark Reinhold, is on record 表示删除当前的Java序列化机制是一个长期目标。
Java通过使用Serializable
接口,提供了您可以选择采用的序列化方案作为语言的一部分。但是,该方案存在一些难以克服的缺陷,应被Java语言设计者视为失败的实验。
相反,请使用可以显式控制的序列化方案。例如协议缓冲区,JSON,XML或您自己的自定义方案。