问题
在Java中,一个类到Serializable
究竟是什么意思?或者一般来说,就此而言......
#1 热门回答(106 赞)
Serialization将对象从内存持久保存到一系列位,例如用于保存到磁盘上。反序列化是相反的 - 从磁盘读取数据以水合/创建对象。
在你的问题的上下文中,它是一个接口,如果在类中实现,该类可以由不同的序列化程序自动序列化和反序列化。
#2 热门回答(33 赞)
这意味着类的实例可以转换为字节流(例如,保存到文件中),然后再次转换回类。这种重新加载可能发生在程序的不同实例中,甚至可能发生在不同的机器上。序列化(使用任何语言)涉及各种问题,尤其是当你可以引用可序列化的其他对象时。
#3 热门回答(32 赞)
虽然大多数用户已经给出了答案,但我想为那些需要它的人添加一个例子来解释这个想法:
假设你有一个类人,如下所示:
public class Person implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public String firstName;
public String lastName;
public int age;
public String address;
public void play() {
System.out.println(String.format(
"If I win, send me the trophy to this address: %s", address));
}
@Override
public String toString() {
return String.format(".....Person......\nFirst Name = %s\nLast Name = %s", firstName, lastName);
}
}
然后你创建一个这样的对象:
Person william = new Person();
william.firstName = "William";
william.lastName = "Kinaan";
william.age = 26;
william.address = "Lisbon, Portugal";
你可以将该对象序列化为多个流。我会这样做两个流:
序列号到标准输出:
public static void serializeToStandardOutput(Person person)
throws IOException {
OutputStream outStream = System.out;
ObjectOutputStream stdObjectOut = new ObjectOutputStream(outStream);
stdObjectOut.writeObject(person);
stdObjectOut.close();
outStream.close();
}
序列化到文件:
public static void serializeToFile(Person person) throws IOException {
OutputStream outStream = new FileOutputStream("person.ser");
ObjectOutputStream fileObjectOut = new ObjectOutputStream(outStream);
fileObjectOut.writeObject(person);
fileObjectOut.close();
outStream.close();
}
然后:
从文件中反序列化:
public static void deserializeFromFile() throws IOException,
ClassNotFoundException {
InputStream inStream = new FileInputStream("person.ser");
ObjectInputStream fileObjectIn = new ObjectInputStream(inStream);
Person person = (Person) fileObjectIn.readObject();
System.out.println(person);
fileObjectIn.close();
inStream.close();
}