序列化与反序列化

本文介绍Java中对象的序列化与反序列化过程,包括如何使用ObjectOutputStream和ObjectInputStream类完成对象的写入与读取。通过示例演示了序列化的基本操作及注意事项。

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

一,序列化: 

和IO流有关

类 ObjectInputStream(反序列化) 和 ObjectOutputStream(序列化) 是高层次的数据流,它们包含反序列化和序列化对象的方法。

ObjectOutputStream 类包含很多写方法来写各种数据类型,但是一个特别的方法例外:

public final void writeObject(Object x) throws IOException

上面的方法序列化一个对象,并将它发送到输出流。相似的 ObjectInputStream 类包含如下反序列化一个对象的方法:

public final Object readObject() throws IOException, ClassNotFoundException

该方法从流中取出下一个对象,并将对象反序列化。它的返回值为Object,因此,你需要将它转换成合适的数据类型。

总结:序列化能干嘛? 将一个类对象信息(构造方法,属性,方法)可以写到本地一个文件中。这叫序列化。从文件中读取一个对象的信息,这叫反序列化。

序列化注意事项:

1.被序列化的实体类必须实现一个接口 Serializable,不然不能被序列化

序列化案例:

将一个对象赋值完以后写到到本地。ObjectOutputStream

二,反序列化

 将本地的文件信息(被序列化过的)写到一个对象中

总结:序列化将对象的值存到本地磁盘的文件中以作备份。反序列化可以将本次磁盘序列化过的文件读取到实体类的对象中。

package com.xcl_Q;

import java.io.*;

class  Emm implements Serializable{//必须实现一个接口Seroialzable
    String name;
    int age;
    public void eat(){
        System.out.println("爱吃粑粑!!!");
    }
}
public class Demo6 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Emm emm = new Emm();
        emm.name = "小张";
        emm.age = 33 ;
//        emm.eat();
        //以上是为属性赋值。
        //ObjectInputSteam(序列化)(是将对象序列化以后写到本地)
        FileOutputStream fileOutputStream = new FileOutputStream(new File("E:/aaa/emp.ser"));//预先定义的文件类型
        //将emm对象进行序列化 存在一个文件中 序列化的文件的后缀都是.ser
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);//输出流(是将要写入的内容写到本地的文件来)
        objectOutputStream.writeObject(emm);//将对象信息写入本地文件中
        objectOutputStream.close();//关闭流
        fileOutputStream.close();//关闭流
//        System.out.println("写入成功");
        //下面为反序列化的代码(是将本地文件的信息读取出来)
        FileInputStream fileInputStream = new FileInputStream(new File("E:/aaa/emp.ser"));//首先获取文件信息
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);//将文件反序列化到本地文件中
        Emm emm1 = (Emm)objectInputStream.readObject();//将对象来进行转型(强转)
        System.out.println("姓名:"+emm1.name);//打印对象信息(名字)
        System.out.println("年龄:"+emm1.age);//打印对象信息(年龄)
        emm.eat();//方法调用出来
        /**
         * 总结:
         * 1,序列化的对象的值存到本地磁盘文件以作为备份 而反序列化可以将本地磁盘文件序列化
         * 过得文件读取到实体对象类中
         *将本地的文件信息(被序列化过的)写到一个对象中
         */


    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值