シリアル化_Java

シリアル化を簡単に理解すると、シリアル化は、シリアル化するクラス内のすべてのものをファイル内のデータ ストリームに保存することと同じですたとえば、ゲームをプレイするときに一時停止や終了などを行う必要があります。このときゲームの状態を保存する必要があり、次回ゲームをプレイするときに直接ゲームを続行することで現在の状態に戻すことができます。(一部の拷問ゲームにはゲームを保存する機能がありません。) また、二次元の太陽系を絵画に保存することも考えられます。三次元の太陽系に戻ります。
ただし、シリアル化したい場合は、まずクラスがシリアル化をサポートする必要があります。言い換えれば、シリアル化されたものは、シリアル化できるインターフェイス Serializable を実装する必要があります。シリアル化自体は IO フローと切り離せないため、IO の動作を理解する必要があります。

1.連載

package com.Unit1;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class RunTest05 {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //首先表示作为一个文件输出。
        FileOutputStream outputStream = new FileOutputStream("E:\\student.txt");
        ObjectOutputStream out = new ObjectOutputStream(outputStream);
        //生成Student对象
        Student stu = new Student("徐凤年", 21);
        //将stu对象序列化并写到上面提到的文件路径中。
        out.writeObject(stu);
        //记得关闭流
        out.close();
        outputStream.close();
    }
}

class Student implements Serializable {
    
    
    private String name;
    private int age;

    public Student() {
    
    

    }

    public Student(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
}

この時、E:\student.txtが自動生成されるのですが、開いてみると文字化けが発生しています。
ここに画像の説明を挿入
ここに画像の説明を挿入

2. デシリアライゼーション

では、保存したデータを読み出すにはどうすればよいでしょうか?逆シリアル化を使用します。原理は同じですが、1 つは書き込み用、もう 1 つは読み取り用です。シリアル化も、やや特殊な IO ストリーム操作です。

逆シリアル化は、ファイルやオブジェクトなどから保存したデータの一部を取り出すことと同じです。どのようなクラスを使用して書き込んだのか、そして今はどのようなクラスを使用して受信しているのか。読み出されるのは Object クラスだけです。上方変換が必要です。

package com.Unit1;

import java.io.*;

public class RunTest05 {
    
    
    public static void main(String[] args) throws Exception {
    
    

        //首先指定文件路径
        FileInputStream inputStream = new FileInputStream("E:\\student.txt");
        ObjectInputStream in = new ObjectInputStream(inputStream);
        //因为是 readObject(),所以读出来的肯定是一个Object类。我们需要进行强转
        Student stu2 = (Student) in.readObject();
        //我们读一下刚才存进去的数据,看对不对
        System.out.println("姓名 :" + stu2.getName());
        System.out.println("年龄 :" + stu2.getAge());
          //记得关闭流
        in.close();
        inputStream.close();
    }
}

class Student implements Serializable {
    
    
    private String name;
    private int age;

    public Student() {
    
    

    }

    public Student(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
}

結果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_45022687/article/details/119393152