面试题答案
一键面试- 类需要满足的条件:
- 类必须实现
java.io.Serializable
接口,该接口是一个标记接口,没有任何方法,只是用于标识该类可以被序列化。例如:
- 类必须实现
import java.io.Serializable;
public class MyClass implements Serializable {
// 类的成员变量和方法
}
- 序列化步骤:
- 使用
ObjectOutputStream
类来进行序列化操作。 - 首先创建一个
FileOutputStream
对象,用于指定输出的文件路径。 - 然后将
FileOutputStream
对象作为参数传递给ObjectOutputStream
的构造函数,创建ObjectOutputStream
对象。 - 调用
ObjectOutputStream
的writeObject()
方法,将需要序列化的对象作为参数传入。示例代码如下:
- 使用
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializeExample {
public static void main(String[] args) {
MyClass obj = new MyClass();
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myObject.ser"))) {
oos.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 反序列化步骤:
- 使用
ObjectInputStream
类来进行反序列化操作。 - 首先创建一个
FileInputStream
对象,用于指定读取的文件路径(即之前序列化生成的文件)。 - 然后将
FileInputStream
对象作为参数传递给ObjectInputStream
的构造函数,创建ObjectInputStream
对象。 - 调用
ObjectInputStream
的readObject()
方法,将返回的对象进行强制类型转换为原类型。示例代码如下:
- 使用
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializeExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myObject.ser"))) {
MyClass obj = (MyClass)ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
主要使用的类有ObjectOutputStream
(用于序列化)和ObjectInputStream
(用于反序列化),主要方法有ObjectOutputStream
的writeObject()
和ObjectInputStream
的readObject()
。