您现在的位置是:首页 > 编程 > 

Java序列化流详解

2025-07-27 19:48:10
Java序列化流详解 一、概述1、序列化将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;2、反序列化将文件中保存的对象以流的方式读取出来,叫读对象,也叫对象的反序列化;、图解二、对象的序列化流ObjectOutputStream1、简介作用:将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;2、构造方法ObjectOutputStream(OutputStrea

Java序列化流详解

一、概述

1、序列化

将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;

2、反序列化

将文件中保存的对象以流的方式读取出来,叫读对象,也叫对象的反序列化;

、图解

二、对象的序列化流ObjectOutputStream

1、简介

作用:将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;

2、构造方法

ObjectOutputStream(OutputStream out)

创建写入指定 OutputStream 的 ObjectOutputStream;

参数说明:

OutputStream out:字节输出流;

、特有的成员方法

void writeObject(Object object)将指定的对象写入ObjectOutputStream;

4、使用步骤

①创建ObjectOutputStream对象,传入字节输出流;

②使用ObjectOutputStream中的writeObject方法,把对象写入到文件中;

③释放资源;

但是,只有这些是不对的!

序列化和反序列化会抛出otSerializableException(没有序列化)异常;

类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。、

说明:

Serializable接口也叫标记型接口:要进行序列化和反序列化的类,通过实现这个接口,获得一个标记,当类进行序列化或者反序列化操作时若有此标记则可以进行序列化或者反序列化,若没有这个标记,则会报otSerializableException(没有序列化)异常,

5、代码演示

Persion类:
代码语言:javascript代码运行次数:0运行复制
package study.io;

import java.io.Serializable;

public class Persion implements Serializable {
    private String name;
    private int age;

    public Persion() {
    }

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

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

    public String getame() {
        return name;
    }

    public void setame(String name) {
         = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
代码:
代码语言:javascript代码运行次数:0运行复制
package study.io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamTest {
    public static void main(String[] args) throws IOException {
        //①创建ObjectOutputStream对象,传入字节输出流;
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\"));
        //②使用ObjectOutputStream中的writeObject方法,把对象写入到文件中;
        Persion p1 = new Persion("大哥",20);
        Persion p2 = new Persion("二哥",18);
        objectOutputStream.writeObject(p1);
        objectOutputStream.writeObject(p2);
        //③释放资源;
        ();
    }
}
运行结果:
三、对象的反序列化流ObjectInputStream

1、简介

将文件中保存的对象以流的方式读取出来,叫读对象,也叫对象的反序列化;

2、构造方法

ObjectInputStream(InputStream in)

创建从指定 InputStream 读取的 ObjectInputStream;

参数说明:

InputStream in:字节输入流;

、特有成员方法

Object readObject():

从ObjectInputStream读取对象;

4、使用步骤

①创建ObjectInputStream对象,构造方法中传入字节输入流;

②使用ObjectInputStream中的readObject方法,读取文件中保存的对象;

③释放资源;

④使用读取出来的对象(打印);

备注:有可能出现的异常ClassotFoundException

所以使用反序列化的两个前提:

①类必须实现Serializable接口;

②必须存在对应的class文件;

5、代码演示

代码:
代码语言:javascript代码运行次数:0运行复制
package study.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamTest {
    public static void main(String[] args) throws IOException, ClassotFoundException {
        //①创建ObjectInputStream对象,构造方法中传入字节输入流;
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\"));
        //②使用ObjectInputStream中的readObject方法,读取文件中保存的对象;
        Object object1 = objectInputStream.readObject();//一次读一个对象
        Object object2 = objectInputStream.readObject();//一次读一个对象
        //③释放资源;
        ();
        //④使用读取出来的对象(打印);
        Persion persion1 = (Persion)object1;
        Persion persion2 = (Persion)object2;
        println(());
        println(());
    }
}
运行结果:
四、反序列化操作异常2

1、说明

当JVM进行反序列化对象时,能到class文件,但是class文件在序列化对象后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException异常,发生这个异常的原因如下:

①该类的序列版号与从流中读取的类描述符的版本号不匹配;

②该类包含未知数据类型;

③该类没有可访问的无参构造方法;

2、图解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除java对象接口序列化异常

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1200360.html

相关标签:无
上传时间: 2025-07-23 18:40:38
留言与评论(共有 10 条评论)
本站网友 华能海门电厂
2分钟前 发表
把对象写入到文件中; Persion p1 = new Persion("大哥"
本站网友 pdf书
10分钟前 发表
叫写对象
本站网友 半岛晨报电子版
26分钟前 发表
传入字节输出流; ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C
本站网友 腾讯张军
27分钟前 发表
则会报otSerializableException(没有序列化)异常
本站网友 金钱草的功效与作用
18分钟前 发表
当类进行序列化或者反序列化操作时若有此标记则可以进行序列化或者反序列化
本站网友 第三空间
12分钟前 发表
抛出一个InvalidClassException异常
本站网友 qqc
16分钟前 发表
简介作用:将对象以流的方式写入到要保存的文件中
本站网友 韩国烤肉店
10分钟前 发表
如有侵权请联系 cloudcommunity@tencent 删除前往查看java对象接口序列化异常
本站网友 12306分流抢票
23分钟前 发表
ClassotFoundException { //①创建ObjectInputStream对象