Java(十)----IO流之对象的序列化

本文探讨了Java中的对象序列化和反序列化,重点介绍了如何使用ObjectOutputStream和ObjectInputStream。对象序列化是将对象转换为文件以便在网络中传递或存储,要求对象的类实现Serializable接口。反序列化则是将文件恢复为对象。静态属性和被transient修饰的变量不会被序列化。此外,还提到了Externalizable接口,实现该接口需要手动指定序列化变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象的序列化的意义 : 对象变成一个文件,在网络中传递,可以让任何一个人使用

  • ObjectOutputStream 对象的序列化

    • 构造方法ObjectOutputStream(OutputStream out)传递字节输出流

    • void writeObject(Object o)写入对象

    /**
     * 对象的序列化
     */
    public static void writeObj()throws IOException {
        //创建字节输出流,绑定文件
        FileOutputStream fos = new FileOutputStream("day20_2/person.txt");
        //对象的序列化流创建
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        //oos流,写入对象
        Person person = new Person("张三",20);
        oos.writeObject(person);
        oos.close();
    }

 此处传入的Person实体类必须实现接口Serializable  启用序列化功能

  • ObjectInputStream 对象的反序列化

    • 构造方法ObjectInputStream (InputStream out)传递字节输入流

    • Object readObject()读取对象

/**
     * 对象的反序列化
     * ois.readObject(); 类找不到异常 ClassNotFoundException
     * 没有class文件,抛出类找不到异常
     */
    public static void readObj()throws Exception{
        //创建字节输入流,读取数据源文件 ,源文件必须是序列化后的文件
        FileInputStream fis = new FileInputStream("day20_2/person.txt");
        //创建反序列化对象
        ObjectInputStream ois = new ObjectInputStream(fis);
        //读取对象
        Object object = ois.readObject();
        System.out.println(object);
        ois.close();
    }

静态不属于对象!!!!!      若属性前加静态修饰符,则不可序列化 

关键字  transient  :阻止变量的值,被序列化到文件

transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。 

Long型数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值