Java 文件操作之序列化与对象处理流详解
什么是序列化?
序列化是将一个 Java对象转换成可存储或可传输的格式,比如二进制流、XML或者JSON格式。序列化可以将一个对象传输到网络上,也可以存储到本地磁盘,或者传输到远程服务器上。
为什么需要序列化?
当我们需要将一个对象从一个Java应用传输到另外一个Java应用时,无法直接将对象传输到网络上或操作系统中。需要将对象转换成字节流或者文本(XML或JSON等)格式。传输过程中需要保证对象数据的完整性,需要将所有对象的属性都保存到字节流或文本中,以实现对象在不同应用程序和系统中的互通。
Java对象的序列化和反序列化
Java提供了对对象的序列化和反序列化支持,只需要让需要序列化的对象实现Serializable
接口即可。Serializable
接口是一个标准的接口,用于标示对象要被序列化。
示例:
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
上面的代码实现了一个Student
类型,并实现了Serializable
接口。我们可以将该对象序列化到文件中或通过网络传输到其他应用。
对象输出流和对象输入流
Java提供了ObjectOutputStream
和ObjectInputStream
两个类,用于对象的序列化和反序列化。
对象输出流示例
下面是一个将Student
对象序列化并写入文件的简单示例:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Serializer {
public static void main(String[] args) throws Exception {
Student student = new Student("Lucy", 28);
// 将student对象序列化到文件
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("student.dat"));
objectOutputStream.writeObject(student);
objectOutputStream.close();
}
}
对象输入流示例
下面是一个读取Student
对象并反序列化的示例:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Deserializer {
public static void main(String[] args) throws Exception {
// 读取student.dat文件并反序列化为Student对象
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("student.dat"));
Student student = (Student) objectInputStream.readObject();
objectInputStream.close();
System.out.println("Name: " + student.getName());
System.out.println("Age: " + student.getAge());
}
}
总结
以上就是Java文件操作之序列化与对象处理流的详解。
通过本文,你应该了解什么是序列化、为什么需要序列化,以及Java对象的序列化和反序列化。
在Java中,我们可以使用Serializable
接口标记要序列化的对象,使用ObjectOutputStream
和ObjectInputStream
读写序列化对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java文件操作之序列化与对象处理流详解 - Python技术站