实现序列化的必备要求:只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列
Java中的序列化是将对象转换为字节序列的过程,反序列化则是将字节序列转换回对象。实现序列化的必备要求是只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。
Serializable接口是一个标记接口,即没有任何方法需要实现,只是标识该类的对象可以被序列化。当一个类实现了Serializable接口后,就可以使用Java提供的ObjectOutputStream将该类的对象序列化为字节序列,并使用ObjectInputStream将字节序列反序列化回对象。
示例代码如下:
```java
import java.io.*;
public class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Student student = new Student("John", 20);
// 序列化对象
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("student.ser"));
objectOutputStream.writeObject(student);
objectOutputStream.close();
// 反序列化对象
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("student.ser"));
Student deserializedStudent = (Student) objectInputStream.readObject();
objectInputStream.close();
System.out.println(deserializedStudent.getName() + " " + deserializedStudent.getAge());
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
在上面的示例代码中,我们定义了一个Student类,并实现了Serializable接口。接着,我们创建了一个Student对象,并使用ObjectOutputStream将其序列化为字节序列,并保存到文件中。我们使用ObjectInputStream从文件中读取字节序列,并将其反序列化回Student对象。我们输出反序列化后的Student对象的name和age属性。
需要注意的是,如果一个类实现了Serializable接口,那么该类的所有非transient字段都会被序列化。如果一个字段不希望被序列化,可以将其标记为transient。
版权声明:xxxxxxxxx;
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态