使用ObjectInputStream和ObjectOutputStream进行序列化和反序列化java
时间: 2023-02-08 18:13:03 浏览: 147
ObjectInputStream和ObjectOutputStream类可以用来在Java中进行序列化和反序列化。序列化是将Java对象的状态保存到存储媒体(如磁盘、网络或其他连接)中,反序列化则是将存储在存储媒体中的对象状态重新读入到Java程序中。
使用ObjectInputStream和ObjectOutputStream进行序列化,需要在目标类上添加序列化接口(Serializable)
序列化示例代码:
```
FileOutputStream fos = new FileOutputStream("object.data");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object);
oos.close();
```
反序列化示例代码:
```
FileInputStream fis = new FileInputStream("object.data");
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
ois.close();
```
注意:被序列化的对象需要实现java.io.Serializable 接口.
相关问题
使用ObjectInputStream和ObjectOutputStream类有哪些注意事项?
使用ObjectInputStream和ObjectOutputStream类需要注意以下几点:
1. 对象的序列化和反序列化必须使用相同的版本号,否则会抛出InvalidClassException异常。
2. 对象的类必须实现Serializable接口,否则会抛出NotSerializableException异常。
3. 如果对象中有引用其他对象,那么这些对象也必须是可序列化的。
4. 没有序列化的对象(如线程、文件句柄等)不能被序列化。
5. 在使用ObjectOutputStream写出对象时,必须先写出所有的基本类型和字符串,再写出对象。
6. 在使用ObjectInputStream读入对象时,必须先读入所有的基本类型和字符串,再读入对象。
7. 为了避免出现乱码和数据丢失等问题,建议在ObjectInputStream和ObjectOutputStream的构造函数中指定编码方式(如UTF-8)。
总之,正确使用ObjectInputStream和ObjectOutputStream类可以方便地实现对象的序列化和反序列化,但需要注意以上几点。
java 如何 进行序列化和反序列化
Java中的序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。Java提供了一个Serializable接口,当一个类实现了Serializable接口时,就可以将其实例序列化为字节流。
序列化:
```java
try {
FileOutputStream fileOut = new FileOutputStream("employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(employee);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in employee.ser");
} catch (IOException i) {
i.printStackTrace();
}
```
反序列化:
```java
try {
FileInputStream fileIn = new FileInputStream("employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Employee e = (Employee) in.readObject();
in.close();
fileIn.close();
System.out.println("Deserialized Employee...");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
} catch (IOException i) {
i.printStackTrace();
} catch (ClassNotFoundException c) {
System.out.println("Employee class not found");
c.printStackTrace();
}
```