溫馨提示×

Java序列化與反序列化如何實現(xiàn)

小樊
81
2024-10-24 03:37:46
欄目: 編程語言

在Java中,序列化和反序列化是將對象轉換為字節(jié)流以便在網(wǎng)絡上傳輸或將其存儲到磁盤上的過程。序列化是將對象的狀態(tài)(即其成員變量的值)轉換為字節(jié)流的過程。反序列化則是將字節(jié)流重新轉換為對象的過程。

Java提供了java.io.Serializable接口,用于標識一個類的對象可以被序列化。要序列化一個對象,需要實現(xiàn)Serializable接口,并使用java.io.ObjectOutputStream類將其寫入字節(jié)流中。要反序列化一個對象,需要使用java.io.ObjectInputStream類從字節(jié)流中讀取對象。

以下是一個簡單的示例,演示了如何使用Java序列化和反序列化:

  1. 首先,創(chuàng)建一個實現(xiàn)Serializable接口的類:
import java.io.Serializable;

public 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 +
                '}';
    }
}
  1. 接下來,使用ObjectOutputStream將對象序列化為字節(jié)流:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeExample {
    public static void main(String[] args) {
        Person person = new Person("John Doe", 30);

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            oos.writeObject(person);
            System.out.println("Person對象已成功序列化到文件person.ser");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 最后,使用ObjectInputStream將字節(jié)流反序列化為對象:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializeExample {
    public static void main(String[] args) {
        Person person = null;

        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            person = (Person) ois.readObject();
            System.out.println("Person對象已成功從文件person.ser反序列化");
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

        System.out.println(person);
    }
}

運行上述示例,將會看到以下輸出:

Person對象已成功序列化到文件person.ser
Person對象已成功從文件person.ser反序列化

這表明Java序列化和反序列化已成功實現(xiàn)。

0