返回
流处理中,不为人知的序列化和打印流
后端
2023-12-26 00:51:11
Java流处理之序列化和打印流
1. 概述
Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。这种机制可以将对象持久化到磁盘或者网络上,也可以用于在不同的系统之间传输对象。
2. 序列化
序列化是一个将对象转换成字节序列的过程。这个过程由一个实现了 java.io.Serializable 接口的类完成。该接口只包含一个叫做 writeObject() 的方法,这个方法的作用就是将对象转换成字节序列。
3. 反序列化
反序列化是一个将字节序列转换成对象的过程。这个过程由一个实现了 java.io.Serializable 接口的类完成。该接口只包含一个叫做 readObject() 的方法,这个方法的作用就是将字节序列转换成对象。
4. 流
流是一个抽象的概念,它表示一个数据源或一个数据目标。流可以是文件、网络连接、内存缓存等。流可以被读写,也可以被打开和关闭。
5. 打印流
打印流是一种特殊的流,它可以将数据打印到控制台或文件上。打印流有一个叫做 println() 的方法,这个方法可以将数据打印到控制台上。
6. 使用示例
以下是一个使用序列化和打印流的示例:
import java.io.*;
public class Main {
public static void main(String[] args) {
// 创建一个对象
Person person = new Person("John", 25);
// 将对象序列化到文件
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
// 从文件中反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person2 = (Person) ois.readObject();
System.out.println(person2);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
// 使用打印流将对象打印到控制台
try (PrintStream ps = new PrintStream(System.out)) {
ps.println(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
7. 总结
序列化和打印流是 Java 流处理中的两个重要工具。序列化可以将对象持久化到磁盘或者网络上,也可以用于在不同的系统之间传输对象。打印流可以将数据打印到控制台或文件上。