JAVA IO流-对象流 <ObjectInputStream>输入流 与 <ObjectOutputStream>输出流

27 篇文章 0 订阅

IO流-对象流

这个流的作用是,把程序中的对象存到磁盘中 (文本文档) ,然后还能读取回来继续用

注意:
	对象流传输的是对象
	对象流传输的是对象
	对象流传输的是对象

对象流在写出对象(存储到本地)时,会自动序列化对象, 对象和对象的类都有一条相同的序列号,在读取对象回到
程序时,程序会比对对象和对象类的序列号,序列号一样,将对象按照对象类的格式反序列化转换成对象原本的样
子.

对象-->序列化(加密)-->存到本地文件
本地文件-->反序列化(解密)-->重新读取回到程序

对象和对象的类的序列号是一样的
序列号就相当于<对象> 匹配 <对象类> 的标识

如果对象被储存到本地文件后,对象的类的内容发生改变,那么对象类的序列号也会改变
这时将本地文件中的对象读取回程序时, <对象>序列号 无法匹配 <对象类>序列号,那么无法读取,程序报错

通俗讲, 程序是看 <序列号> 来分辨 <对象> 是哪个 <类> ,<类>的内容改变,<类> 的 <序列号> 改变
<对象> 和 <类> 的序列号不一样, 程序分辨不出来 <对象> 是哪个类 ,程序报错

程序直接傻了,这个<对象>是谁啊? 怎么跟我这里的 <类> 都匹配不上,我淦

注意 !!! : 自定义类需要实现Serializable接口

最后补充一点.私有化的静态属性不会被序列化
private static

为了代码可读性,下面代码全部抛出错误,实际使用中要用try/catch捕获

1.<ObjectOutputStream>输出流

下面,我来存一个集合	
存数组的好处就是,可以把 <自定义类对象> 放进 集合,存到本地,然后读取集合,通过集合使用<自定义类对象>
这就很方便啊
public class demo {
    public static void main(String[] args) throws Exception {

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("a.txt"));

        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);
        //写到目标地址文件中
        objectOutputStream.writeObject(integers);
        //关流
        objectOutputStream.close();
    }
}

a.txt 内容

�� sr java.util.ArrayListx����a� I sizexp w sr java.lang.Integer⠤���8 I valuexr java.lang.Number������ xp sq ~ sq ~ sq ~ sq ~ x

内容是乱码的,人看不懂, 但是电脑看得懂

2.<ObjectInputStream>输入流

读取刚刚存的数据
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("a.txt"));

        //读取 读取到的是Object类
        Object o = objectInputStream.readObject();

        //关流
        objectInputStream.close();

        //将读取到的Object类对象强转回原来的对象
        List<Integer> list = (List)o;

        //输出看看
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

输出结果

1
2
3
4
5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值