返回

流处理中,不为人知的序列化和打印流

后端

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 流处理中的两个重要工具。序列化可以将对象持久化到磁盘或者网络上,也可以用于在不同的系统之间传输对象。打印流可以将数据打印到控制台或文件上。