Java IO 读取类对象的流 ObjectInputStream,ObjectOutputStream 使用教程.

一、读取类对象的流 ObjectInputStream,ObjectOutputStream 可以将 对象的实例序列化,和反序列化(不懂没关系看代码)

二、练习

1.要求:储存一个实例化的CriminalSuspect 嫌疑人对象 到txt文件,然后读取出来.

2.分析: 读取类对象的流 ObjectInputStream,ObjectOutputStream

  • 一、作用 : 对象IO流可以储存和取出对象的序列,
  • 要求 对象必须实现接口 序列化接口
  • Serializable接口
  • 二、使用方法
  • 1.构造
  • new ObjectOutputStream(FileOutputStream )
  • 2.写入方法
  • writeObject(new Object),当然你也可以自定义类。

  • 3.新建 new ObjectInputStream(FileOutputStream )
  • 4.读取数据readObject() 返回为一个Object对象
  • 三、步骤
  • 1.new ObjectOutputStream(FileOutputStream )
  • 2.写入数据.writeObject(new Object)
  • 3.刷新关闭
  • 4.新建 new ObjectInputStream(FileOutputStream )
  • 5.读取数据readObject() 返回为一个Object对象
  • 6.关闭

3. 嫌疑人的类

CriminalSuspect.java

package Java学习.Java高级.IO.类对象的IO流ObjectInputStream;

import java.io.Serializable;
//Serializable可序列化
public class CriminalSuspect implements Serializable {
    private String name;
    private int age;

    public CriminalSuspect(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public String toString() {
        return "CriminalSuspect{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.主类

Main.java

package Java学习.Java高级.IO.类对象的IO流ObjectInputStream;

import java.io.*;

/**
 * 要求:储存一个实例化的CriminalSuspect 嫌疑人对象 到txt文件,然后读取出来.
 *
 * 一、作用 : 对象IO流可以储存和取出对象的序列,
 * 要求 对象必须实现接口 序列化接口》
 * @Serializable
 * 二、使用方法
 * 1.构造
 * new ObjectOutputStream(FileOutputStream )
 * 2.写入方法
 * writeObject(new Object),当然你也可以自定义类。
 * -------------
 * 3.新建 new ObjectInputStream(FileOutputStream )
 * 4.读取数据readObject() 返回为一个Object对象
 * 三、步骤
 * 1.new ObjectOutputStream(FileOutputStream )
 * 2.写入数据.writeObject(new Object)
 * 3.刷新关闭
 * 4.新建 new ObjectInputStream(FileOutputStream )
 * 5.读取数据readObject() 返回为一个Object对象
 * 6.关闭
 */
public class Main {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java学习\\Java高级\\IO\\类对象" +
                "的IO流ObjectInputStream\\";
        //1..new ObjectOutputStream(FileOutputStream )
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(url + "新建的CriminalSuspect嫌疑人实例的序列化.txt"));
        // * 2.写入数据.writeObject(new Object)
        CriminalSuspect criminalSuspect = new CriminalSuspect("张三", 13);
        objectOutputStream.writeObject(criminalSuspect);
        //3刷新关闭
        objectOutputStream.flush();
        objectOutputStream.close();
        //4.新建 new ObjectInputStream(FileOutputStream )
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(url + "新建的CriminalSuspect嫌疑人实例的序列化.txt"));
        //读取数据readObject() 返回为一个Object对象
        Object object = objectInputStream.readObject();
        System.out.println(object);
        objectInputStream.close();
    }

}

Run:
CriminalSuspect{name=‘张三’, age=13}

Process finished with exit code 0
在这里插入图片描述

三、拓展,在序列化之后还未反序列化之前,修改Person类,会异常

在这里插入图片描述

四、练习 在文件中保存多个对象

1.步骤

  • 1.new ArrayList()新建结合
  • 2.在集合中添加对象
  • 3.序列化集合ArrayList
  • 4.反序列化集合并遍历输出

2.code

package Java学习.Java高级.IO.类对象的IO流ObjectInputStream.练习序列化集合;

import java.io.*;
import java.util.ArrayList;

/**
* 一、要求:在文件中保存多个对象
* 二、步骤;
* 1.new ArrayList<Person>()新建结合
* 2.在集合中添加对象
* 3.序列化集合ArrayList
* 4.反序列化集合并遍历输出
*/
public class Demo {
   public static void main(String[] args) throws IOException, ClassNotFoundException {
       //1.
       ArrayList<Person> personArrayList = new ArrayList<>();
       //2
       personArrayList.add(new Person("张三",13));
       personArrayList.add(new Person("李四",14));
       personArrayList.add(new Person("王五",15));
       //3序列化集合
       String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java学习\\Java高级\\IO\\类对象" +
               "的IO流ObjectInputStream\\练习序列化集合\\集合的序列化.txt";
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(url));
       objectOutputStream.writeObject(personArrayList);
       objectOutputStream.flush();
       objectOutputStream.close();
       //4.反序列化
       ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(url));
       Object object = objectInputStream.readObject();
       System.out.println("反序列化的对象object: "+object);
       System.out.println("强转然后遍历输出结果:");
       personArrayList = (ArrayList<Person>)object;
       for (Person person : personArrayList) {
           System.out.println(person);
       }
   }
}

Run:
反序列化的对象object: [Person{name=‘张三’, age=13}, Person{name=‘李四’, age=14}, Person{name=‘王五’, age=15}]
强转然后遍历输出结果:
Person{name=‘张三’, age=13}
Person{name=‘李四’, age=14}
Person{name=‘王五’, age=15}

Process finished with exit code 0
在这里插入图片描述

原创文章 132 获赞 11 访问量 4707

猜你喜欢

转载自blog.csdn.net/jarvan5/article/details/106007354
今日推荐