面试题答案
一键面试- 首先定义
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;
}
}
- 然后进行序列化操作:
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();
}
}
}
- 最后进行反序列化操作:
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
接口,这是使用ObjectOutputStream
和ObjectInputStream
进行序列化和反序列化的前提。SerializeUser
类创建了一个User
对象,并将其序列化到名为user.ser
的文件中。DeserializeUser
类从user.ser
文件中读取数据,并反序列化为User
对象,然后打印出对象的属性值。serialVersionUID
用于确保在反序列化时类的版本兼容性。