java.io.Serializable 接口来对对象进行序列化和反序列化;在 Python 中,你可以使用 pickle 模块进行序列化和反序列化;在 JavaScript 中,你可以使用 JSON 的 stringify 和 parse 方法进行序列化和反序列化等。Serializable接口?Serializable 接口是一种标记接口,本身并没有定义任何方法,但是它向 JVM 提供了一个指示,表明实现该接口的类可以被序列化和反序列化。这意味着你可以将该类的对象转换为字节流(序列化),然后再将这个字节流转回为对象(反序列化)。Serializable 接口。如果没有实现,将会抛出一个 NotSerializableException 异常。Serializable 接口的主要原因如下:
Serializable 接口的对象。Serializable 接口的类表示它满足 JVM 对于序列化的要求。这不仅仅是类的实例可以被转换为字节流,还包括这个类的实例可以被反序列化,而且反序列化后的对象保持了原始对象的状态。Serializable 接口的对象才能通过网络进行传输。Serializable 接口的对象可以被持久化。Serializable 接口是为了使对象可以被序列化和反序列化,以便在不同的环境或时间点恢复对象的状态,或在 JVM 之间传输对象,或将对象的状态持久化。当然可以。下面这个简单的例子中,我们将创建一个实现了 Serializable 接口的类 Person,然后进行序列化和反序列化:
首先,我们创建一个实现了 Serializable 接口的 Person 类:
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
接下来,我们创建一个序列化这个 Person 对象的类 SerializeDemo:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class SerializeDemo {
public static void main(String[] args) {
Person p1 = new Person("John Doe", 30);
try {
FileOutputStream fileOut = new FileOutputStream("/tmp/person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(p1);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in /tmp/person.ser");
} catch (Exception e) {
e.printStackTrace();
}
}
}
现在我们来反序列化这个 Person 对象,创建一个类 DeserializeDemo:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class DeserializeDemo {
public static void main(String[] args) {
Person p = null;
try {
FileInputStream fileIn = new FileInputStream("/tmp/person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
p = (Person) in.readObject();
in.close();
fileIn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Deserialized Person...");
System.out.println("Name: " + p.getName());
System.out.println("Age: " + p.getAge());
}
}
以上就是一个完整的 Java 序列化和反序列化的例子。首先我们创建了一个 Person 对象并序列化到一个文件中,然后我们从这个文件中读取数据并反序列化回 Person 对象。