Serializable接口和objectstream流的关系
时间: 2024-02-09 17:09:19 浏览: 112
`Serializable`接口和`ObjectOutputStream`、`ObjectInputStream`流是密切相关的,这两个流是用来序列化和反序列化对象的。
当我们需要将一个对象序列化为字节流时,可以使用`ObjectOutputStream`流,它会自动将实现了`Serializable`接口的对象转化为字节流。例如,下面的代码将一个对象`person`序列化为字节流,并将字节流写入文件`person.ser`:
```
Person person = new Person("Tom", 20);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
oos.writeObject(person);
oos.close();
```
当我们需要将一个字节流反序列化为对象时,可以使用`ObjectInputStream`流,它会自动将字节流转化为实现了`Serializable`接口的对象。例如,下面的代码从文件`person.ser`中读取字节流,并将字节流反序列化为对象:
```
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
Person person = (Person)ois.readObject();
ois.close();
```
需要注意的是,只有实现了`Serializable`接口的对象才能使用`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列化。否则,在序列化或反序列化过程中会抛出`NotSerializableException`异常。
阅读全文