java教程之对象序列化使用基础示例详解


在Java中,对象序列化是将对象的状态信息转换为可以存储或传输的形式的过程,通常是将对象转换为字节序列,并可以通过反序列化重新构造出对象。以下是一个简单的对象序列化使用示例,包括一个可序列化的类、序列化和反序列化的基本方法。

### 可序列化的类

首先,定义一个可序列化的类。为了让一个类可序列化,它必须实现`java.io.Serializable`接口。这个接口是一个标记接口,不包含任何方法,但它的存在告诉Java虚拟机这个类的对象可以被序列化。


import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L; // 版本控制,用于序列化兼容性

    private String name;
    private int age;

    // 构造函数
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter和Setter省略

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

### 序列化对象

接下来,编写一个方法来序列化`User`对象到文件中。


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeDemo {
    public static void serialize(User user, String filePath) {
        try (FileOutputStream fileOut = new FileOutputStream(filePath);
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(user); // 序列化对象
            System.out.printf("Serialized data is saved in %s%n", filePath);
        } catch (IOException i) {
            i.printStackTrace();
        }
    }
}

### 反序列化对象

最后,编写一个方法来从文件中反序列化`User`对象。


import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializeDemo {
    public static User deserialize(String filePath) {
        User user = null;
        try (FileInputStream fileIn = new FileInputStream(filePath);
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            user = (User) in.readObject(); // 反序列化对象
        } catch (IOException i) {
            i.printStackTrace();
            return null;
        } catch (ClassNotFoundException c) {
            System.out.println("User class not found");
            c.printStackTrace();
            return null;
        }
        return user;
    }
}

### 使用示例

现在,你可以通过调用`SerializeDemo.serialize()`方法来序列化一个`User`对象,并通过`DeserializeDemo.deserialize()`方法来反序列化它。


public class Main {
    public static void main(String[] args) {
        User user = new User("John Doe", 30);
        String filePath = "user.ser";

        // 序列化
        SerializeDemo.serialize(user, filePath);

        // 反序列化
        User deserializedUser = DeserializeDemo.deserialize(filePath);
        if (deserializedUser != null) {
            System.out.println(deserializedUser);
        }
    }
}

这个例子演示了如何在Java中进行基本的对象序列化和反序列化操作。记住,只有实现了`Serializable`接口的类的对象才能被序列化。