对象流的两个类:
ObjectOutputStream: 将 Java 对象的基本数据类型和图形写入 OutputStream
ObjectInputStream: 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化
序列化一组对象:
在系列化操作中, 同时序列化多个对象时, 反序列化也必须按顺序操作, 如果想要序列化一组对象该如何操作呢?
序列化一组对象可采用, 对象数组的形式, 因为对象数组可以向 Object 进行转型操作.
把对象序列化到文件当中, 然而文件中存的是字节. 我们对象里面相关属性的值之类的转化为字节写入文件中, 这个过程就叫序列化
反序列化过程: 把文件中对象属性之类的, 读出来, 字节换为对象
transicent 关键字:
如果用 transient 声明一个实例变量, 当对象储存是, 它的值不需要维持.
- Dog.java:
- package IODemo;
- import java.io.Serializable;
- /** 如果一个类创建对象, 需要被序列化, 那么该类必须实现 Serializable 接口
- * Serializable 是一个标记接口, 没有任何定义, 为了告诉 JVM 该类对象可以被序列化
- * 什么时候对象需要被序列化呢?
- * 1, 把对象保存到文件中(储存到物理介质)
- * 2, 对象需要在网络上传输
- */
- // 要传输的这个对象如果不序列化 (Serializable) 的话 就会报错 java.io.NotSerializableException
- public class Dog implements Serializable{
- private String name;
- private int age;
- private String sex;
- // private transient int id; 如果使用 transient 关键字, 说明在序列化时可以忽略这个值
- public Dog(String name, int age, String sex) {
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
- public Dog() {
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- '}';
- }
- }
- ObjectStreamDemo.java :
- package IODemo;
- import java.io.*;
- /**
- * 当传输的是多个对象的时候 要用对象数组. 先存到里面然后在遍历读取!
- *
- */
- public class ObjectStreamDemo {
- private static void ObjectRead(){
- File file = new File("d:\\test\\test.obj"); // 扩展名 随意定
- try {
- InputStream in = new FileInputStream(file);
- ObjectInputStream ois = new ObjectInputStream(in);
- Dog dog = (Dog) ois.readObject();
- System.out.println(dog.toString());
- ois.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- private static void ObjectWrite(){
- Dog dog = new Dog("旺旺",2,"公");
- File file = new File("d:\\test\\test.obj"); // 扩展名 随意定
- try {
- OutputStream os = new FileOutputStream(file);
- ObjectOutputStream oos = new ObjectOutputStream(os);
- oos.writeObject(dog);
- oos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- ObjectWrite();
- ObjectRead();
- }
- }
来源: https://www.cnblogs.com/lpss-75074038/p/11980378.html