MST
星途 面试题库

面试题:Java中自定义对象序列化与反序列化:基础实现

在Java中,假设你有一个自定义类`User`,包含`name`(字符串类型)和`age`(整型)两个属性。请实现该类的自定义序列化与反序列化,要求使用`ObjectOutputStream`和`ObjectInputStream`,并确保在序列化和反序列化过程中数据的准确性。
48.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 首先定义User类,实现Serializable接口:
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;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
  1. 然后进行序列化操作:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeUser {
    public static void main(String[] args) {
        User user = new User("Alice", 30);
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
            oos.writeObject(user);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 最后进行反序列化操作:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializeUser {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"))) {
            User user = (User) ois.readObject();
            System.out.println("Name: " + user.getName());
            System.out.println("Age: " + user.getAge());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中:

  • User类实现了Serializable接口,这是使用ObjectOutputStreamObjectInputStream进行序列化和反序列化的前提。
  • SerializeUser类创建了一个User对象,并将其序列化到名为user.ser的文件中。
  • DeserializeUser类从user.ser文件中读取数据,并反序列化为User对象,然后打印出对象的属性值。serialVersionUID用于确保在反序列化时类的版本兼容性。