栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

序列化和反序列化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

序列化和反序列化

序列化和反序列化 基本概念

序列化和反序列化的定义:

Java序列化就是指把Java对象转换为字节序列的过程

Java反序列化就是指把字节序列恢复为Java对象的过程。

序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

将对象转为字节流存储到硬盘上,当JVM停机的话,字节流还会在硬盘上默默等待,等待下一次JVM的启动,把序列化的对象,通过反序列化为原来的对象。

众所周知对象在堆中储存,堆是内存空间断电消失,所以序列化是储存对象的很好的方式。

过程

实现序列化的必备要求

只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常)

附:Serializable接口简析
Serializable是一个空接口

serialVersionUID(序列化版本号)

标识序列化后的版本号,若在反序列回Java对象时,其相应Java类的SerialVersionUID不同(对象的类被修改之后其未显示定义的SerialVersionUID会自动改变),则无法反序列化,报InvalidCastException(序列化版本不一致)

serialVersionUID生成,可以是显式指定,也可以是隐式自动生成(JVM生成)

注意

在类中的内部类也需要实现Serializable或者Externalizable接口不然会报错

如下:

并且可以通过第二张图片可以看出他报错并不会报错到相应的类上,只会报到序列化的那一行

大致操作过程:

		private Map map = new TreeMap ();
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream ("C:\Users\杨骜捷\IdeaProjects\ProjectFinal\src\com\Change\Student");
            oos = new ObjectOutputStream (fos);
            oos.writeObject (map);
            oos.flush ();
        } catch (IOException e){
            e.printStackTrace ();
        } finally {
            if (null != fos) {
                try {
                    fos.close ();
                }catch (IOException e) {
                    e.printStackTrace ();
                }
            }
            if (null != oos) {
                try {
                    oos.close ();
                }catch (IOException e) {
                    e.printStackTrace ();
                }
            }
        }

用到的类

1.java.io.ObjectInputStream–对象输入流

该类的readObject()方法从输入流中读取字节序列,然后将字节序列反序列化为一个对象并返回。

构造方法的api

2.java.io.ObjectOutputStream–对象输出流

该类的writeObject(Object obj)方法将将传入的obj对象进行序列化,把得到的字节序列写入到目标输出流中进行输出。

构造方法的api

注意:

序列化时,只对对象的状态进行保存,而不管对象的方法。

当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口。

当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号