Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据,有关对象的信息和储存在对象中的数据类型。
类ObjectInputStream
和ObjectOutputStream
是最高层次的数据流,他们包含反序列化和序列化的方法。
ObjectOutputStream类包含很多方法来写数据类型
注
意
\color{#FF0000}{注意}
注意
- 该类必须实现
java.io.Serializable
- 该类所有属性必须是可序列化的,如果一个属性不是可序列化的,则该属性必须注明是暂时的
序列化对象
注
意
\color{#FF0000}{注意}
注意
当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名。
public static void main(String[] args) throws IOException {
troubleSea troubleSea = new troubleSea();
troubleSea.setAge("12");
troubleSea.setCombatPower(999999);
troubleSea.setName("哪吒");
troubleSea.setRole("三太子");
try {
//创建新的文件
FileOutputStream fileOutputStream = new FileOutputStream("''jdxTest''testCreationFolder''role.ser");
//新建一个输出流
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//写对象
objectOutputStream.writeObject(troubleSea);
//关流操作
objectOutputStream.close();
fileOutputStream.close();
System.out.println("Serialized data is saved in ''jdxTest''testCreationFolder''role.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
输出结果如下:
Serialized data is saved in ''jdxTest''testCreationFolder''role.ser
反序列化对象
下面的例子实现了反序列化,其中role.ser
其中储存了 role 对象
package dataStructure;
import pojo.troubleSea;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/**
* Created by jdx on 2021/12/20 上午10:34
*/
public class contrarySerialization {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*创建一个空的闹海对象*/
troubleSea sea = null;
try {
//创建一个输入文件
FileInputStream fileInputStream = new FileInputStream("''jdxTest''testCreationFolder''role.ser");
//创建一个输入对象
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
//将读的对象强制转换为troubleSea类型
sea = (troubleSea) objectInputStream.readObject();
//关闭流
objectInputStream.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
return;
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("没有找到类!!!");
return;
}
System.out.println("Deserialized begin ...");
System.out.println("年龄 :" + sea.getAge());
System.out.println("姓名 :" + sea.getName());
System.out.println("角色 :" + sea.getRole());
System.out.println("战力 :" + sea.getCombatPower());
}
}
输出结果如下:
Deserialized begin ...
年龄 :12
姓名 :哪吒
角色 :三太子
战力 :999999