美文网首页
IO流之 对象操作流

IO流之 对象操作流

作者: 测试员 | 来源:发表于2019-08-18 15:23 被阅读0次

对象操作流

核心代码无变化,所以不做多余记录

什么是对象操作流

将对象进行序列化操作和反序列化操作的流,读出就是序列化,写入就是反序列化。

写出的用法:

(1)先要有个实体类并实现 Serializable 接口
(2)在测试类里:
//创建写出对象操作流对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
//创建实体对象
Person p1 = new Person("yuan","18岁");
//将对象添加到目的地
oos.writeObject(p1);
//关闭流
oos.colse()

读入的用法:
    (1)直接在测试类里:
        //创建对象操作流对象
        ObjectInputStream ois =new ObjectInputStream(new FileInputStream("a.txt"));
        //打印读到的内容
        System.out.println(ois.readObject());//该方法,读一条定将指针下移
灵魂3问:

1.修改序列化对象文件会出问题吗

类的串行版本与从流中读取的类描述符的类型不匹配
该类包含未知的数据类型
该类没有可访问的无参数构造函数
这三种情况会抛出InvalidClassException

2.如何解决

添加 private static final long serialVersionUID = 31234L;

3.有不想被序列化的成员变量怎么处理

给该成员变量添加 transient 关键字修饰

优化的思路:
    (1)写入的时候:
        1)把要写入的实体对象创建好。
        2)把创建好的实体对象放到一个集合里。
        2)把这个集合写出到文件。
    (2)读出的时候:
        1)读取集合。
        用增强for遍历,并读出。

例子

    package com.yuan.io.learn;
    
    import java.io.*;
    
    public class 对象操作流 {
        public static void main(String[] args) {
            try (
                    //对象反序列化流
                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Object.txt"));
                    //对象序列化流
                    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Object.txt"))
            ) {
                Person people_1 = new Person("图图", 23);
                Person people_2 = new Person("兮兮", 23);
                //这样就将数据写到了文件中,注意!虽然看不懂文件内容但没关系。用反序列化写出来就OK!
                oos.writeObject(people_1);
                oos.writeObject(people_2);
    
                //用反序列化写出来[这里如果要用循环 只能添加到集合里]
                final Object peop1 = ois.readObject();
                System.out.println("peop1 = " + peop1);
                final Object peop2 = ois.readObject();
                System.out.println("peop2 = " + peop2);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

相关文章

  • IO流之 对象操作流

    对象操作流 核心代码无变化,所以不做多余记录 什么是对象操作流 将对象进行序列化操作和反序列化操作的流,读出就是序...

  • JAVA API-day07

    A 基本的IO操作 文件流 缓冲流 节点流和处理流 对象流

  • IO流之对象流

    对象流的使用 ObjectInputStreamObjectOutputStream 作用:用于存储和读取基本数据...

  • java笔记--IO流(字符流和字节流)

    IO流: 用来处理设备之间的数据传书。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。流...

  • java_io

    java.io.File类的使用IO原理及流的分类  |---文件流   操作对象是文件     FileInp...

  • IO流——对象流

    序列化 ObjectInputStream 和 ObjectOutputStream 作用 用于存储和读取基本数据...

  • Java输入输出流

    IO流 IO流用来处理设备之间的数据传输,传输是通过流的方式Java用于操作流的对象都在java.io包中流就是指...

  • java基础-day20-IO流和StringBuffer

    IO流和StringBuffer 1. IO流 1.1 IO流概述 1.2 IO流分类 1.3 文件操作输入输出字...

  • day18-06-IO流(概述)/07day18-07-IO流(

    IO流用来处理设备之间的数据传输Java对数据的操作是通过流的方式 、Java用于操作流的对象都在IO包中流按操作...

  • IO流对象

    File IO概述 要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、u盘等)上...

网友评论

      本文标题:IO流之 对象操作流

      本文链接:https://www.haomeiwen.com/subject/cjirsctx.html