序列化与反序列化java
时间: 2023-08-29 11:10:54 浏览: 88
序列化和反序列化是Java中用于对象持久化和网络传输的重要概念。
序列化是将对象转换为字节流的过程,可以将对象保存到磁盘或通过网络传输。在Java中,可以通过实现Serializable接口来使一个类可序列化。该接口没有任何方法,只是一个标记接口,表示该类可以进行序列化。
要对一个对象进行序列化,需要使用ObjectOutputStream类。可以将对象写入到文件或输出流中。以下是一个简单的示例:
```java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializationExample {
public static void main(String[] args) {
try {
// 创建一个对象
MyClass obj = new MyClass("Hello, World!");
// 创建一个输出流
FileOutputStream fileOut = new FileOutputStream("object.ser");
// 创建一个对象输出流
ObjectOutputStream out = new ObjectOutputStream(fileOut);
// 序列化对象
out.writeObject(obj);
// 关闭输出流
out.close();
fileOut.close();
System.out.println("对象已被序列化并保存到object.ser文件中");
} catch (IOException e) {
e.printStackTrace();
}
}
}
class MyClass implements Serializable {
private String message;
public MyClass(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
```
反序列化则是将字节流转换回对象的过程。要对一个对象进行反序列化,需要使用ObjectInputStream类。以下是一个简单的示例:
```java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
try {
// 创建一个输入流
FileInputStream fileIn = new FileInputStream("object.ser");
// 创建一个对象输入流
ObjectInputStream in = new ObjectInputStream(fileIn);
// 反序列化对象
MyClass obj = (MyClass) in.readObject();
// 关闭输入流
in.close();
fileIn.close();
System.out.println("从object.ser文件中反序列化出的对象的消息是:" + obj.getMessage());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
需要注意的是,被序列化的类必须实现Serializable接口,并且其中的字段也必须是可序列化的。否则,在序列化或反序列化过程中会抛出NotSerializableException异常。
阅读全文