Java序列化

2023-11-03

Java序列化

原理图

在这里插入图片描述

0bjectoutputstream

java.io.0bjectoutputstream extends outputstreamobjectoutputstream:对象的序列化流
作用:把对象以流的方式写入到文件中保存
构造方法:
objectOutputStream(OutputStream out)创建写入指定OutputStream 的 0bjectOutputStream。
参数∶
outputstream out :字节输出流
特有的成员方法:
void write0bject(0bject obj)将指定的对象写入0bjectOutputStreamo
使用步骤:

  1. 创建objectoutputstream对象,构造方法中传递字节输出流
  2. 使用objectoutputstream对象中的方法writeobject,把对象写入到文件中
  3. 释放资源

注意:
序列化和反序列化的时候,会抛出NotSerializableException没有序列化异常
类通过实现java.io.Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。
serializable接口也叫标记型接口
要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记
有:就可以序列化和反序列化
没有:就会抛出NotSerializableException异常

0bjectInputStream

java.io.0bjectInputStream extends InputStreamobjectInputstream:对象的反序列化流
作用:把文件中保存的对象,以流的方式读取出来使用
构造方法:
objectInputStream(InputStream in)创建从指定InputStream 读取的 0bjectInputStream。

参数∶
lnputstream in :字节输入流

特有的成员方法:
object readobject()从objectInputstream 读取对象。
使用步骤:

  1. 创建objectInputstream对象,构造方法中传递字节输入流
  2. 使用objectInputstream对象中的方法readobject读取保存对象的文件
  3. 释放资源
  4. 使用i读取出来的对象(打印)

readobject方法声明抛出了classNotFoundException(class文件找不到异常)当不存在对象的class文件时抛出此异常
反序列化的前提:

  1. 类必须实现serializable
  2. 必须存在类对应的cLass文件
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Day06\\src\\Person.txt"));
	oos.writeObject(new Person("刘备", 32));
	oos.close();
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Day06\\src\\Person.txt"));
	Object o = ois.readObject();
	System.out.println(o);
        

static关键字:静态关键字
静态优先于非静态加载到内存中(静态优先于对象进入到内存中)被static修饰的成员变量不能被序列化的,序列化的都是对象

transient关键字:瞬态关键字
被transient修饰成员变量,不能被序列化
对于不想被序列化的数据可以使用transient,transient没有static的特性,但是不能被序列化。

序列化冲突异常

在这里插入图片描述
可以通过设置序列号来解决。
static final long serialVersionUID

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java序列化 的相关文章

随机推荐

  • Ubuntu-14.04.5-server安装Tomcat7.0.52

    背景 部署项目需要安装的Tomcat版本为 apache tomcat 7 0 52 tar gz 本文记录安装Tomcat的步骤如下 1 下载Tomcat 访问官网 找到 apache tomcat 7 0 52 tar gz 下载tar
  • es6选择题(带答案)

    es6选择题 1 下面不属于ECMAScript规范的范围的是 A 数据类型 B 语法 C DOM事件 D 内置对象和函数的标准库 答案 C 解析 DOM事件不属于ECMAScript的部分 ECMAScript定义的内容 语法 类型 原型
  • 图像基本处理——腐蚀和膨胀

    文章目录 一 形态学 腐蚀 二 形态学 膨胀 三 腐蚀和膨胀组合运算 一 开运算 二 闭运算 三 梯度运算 四 礼帽和黑帽 一 礼帽 二 黑帽 一 形态学 腐蚀 腐蚀就是通过卷积核 将边界部分向内部靠近 逐步腐蚀掉 opencv腐蚀函数 d
  • UE4多个分支版本兼容相同的工程dll

    如果是从源代码编译出来的UE4 明明代码完全一样 不同机器编译出来的dll却无法兼容 这对于多分支开发非常不方便 在老版本里有个通过版本号判断的逻辑 新版本改没了 分析UE4源码后发现目前是通过BulidId来判断dll跟引擎是不是兼容的
  • 树莓派4B下的usart串口测试

    树莓派4B是树莓派最新发布的版本 串口测试是新手入门的一个必经之路 鉴于网上4B资料相对较少 很多资料都是从3B或3B 上移植过来的 但平台不同 需要的操作也可能不同 这里对树莓派4B做一些总结 关于树莓派串口的问题 可参考链接 https
  • python2.6.6升级python2.7.14

    Centos 6 8系统镜像默认安装的 python 环境是 2 6 6 线上需求需要升级到 2 7 14 版本 网上找了相关资料 升级 python 版本比较容易 但 yum pip 等命令的使用也会有问题 网上的资料是修改脚本 usr
  • vue 表单提交报错:Error in v-on handler (Promise/async):“ Error: Unknown rule type String”

    如下图 原因及解决 原因 editRules 规则定义里本来就默认是String 不用再type定义一次 去掉 type String editRules active code required true type String mess
  • 面试题十道-01- 2021.11.25

    1 java8加了哪些新特性 答 jdk8引入了lambda表达式 lambda表达式实质上是一种匿名内部类 只是写法上简化了 他将原来繁琐的匿名内部类的形式缩减成较为简短的形式 由jvm进行还原 相对于匿名内部类 lambda表达式的书写
  • JSON的语法、常用类型及示例

    JSON结构 JSON结构有两种结构 就是对象和数组 通过这两种结构可以表示各种复杂的结构 province Shanxi 可以理解为是一个包含province为Shanxi的对象 Shanxi Shandong 这是一个包含两个元素的数组
  • Educoder--Java高级特性 - 多线程基础(1)使用线程

    第一题 请仔细阅读右侧代码 根据方法内的提示 在Begin End区域内进行代码补充 具体任务如下 使用继承Thread类的方式创建一个名为 ThreadClassOne 的类 重写的run方法需要实现输出0 10之间的奇数 输出结果如下
  • 开关电源原理、电路组成部分

    开关电源电路图及原理12v分析 详细版 KIA半导体的博客 CSDN博客 开关电源适配器各部分电路原理分析介绍
  • 【区块链实战】什么是 P2P 网络,区块链和 P2P 网络有什么关系

    目录 一 简介 二 知识点 P2P 网络 区块链节点与 P2P 的关系 区块链节点功能分类 P2P 网络特征 三 什么是 P2P 网络 区块链式使用 P2P 网络做什么 1 P2P 网络概念 2 P2P 网络节点特征 3 P2P 与区块链
  • 数据结构之图:无向图的介绍与功能实现,Python——22

    无向图 Undigraph 的介绍 引入 生活中的图 有地图 集成电路板的图 可以看类似的看做是数据结构中的图 数据有 一对一 一对多 和 多对多 的关系 前两种分别表示线性表和树的存储结构性质 而多对多则可表示图的存储结构性质 定义 图是
  • 基于Jupyter(python)使用蒙特·卡罗方法计算圆周率近似值

    使用蒙特 卡罗方法计算圆周率近似值 from random import random times int input 请输入掷飞镖次数 hits 0 for i in range times x random y random if x
  • 操作系统日志收集与分析

    一 Windows日志收集与分析 在运维工作中 如若windows服务器被入侵 往往需要检索和分析相应的安全日志 除了安全设备 系统自带的日志就是取证的关键材料 但是此类日志数量庞大 需要高效分析windows安全日志 提取出我们想要的有用
  • 电源纹波测试,居然还能这么玩

    开关稳压器因其具有非常高的效率优势 正在各个领域逐渐替代线性稳压器 但由于开关稳压器通常被认为具有很大的输出纹波 Ripple 所以很多工程师在高性能和噪声敏感型系统中只考虑使用低压差 LDO 稳压器 而事实上 现今很多高性能开关稳压器都已
  • 迁移学习概述

    1 迁移学习的背景 在有监督的机器学习和尤其是深度学习的场景应用中 需要大量的标注数据 标注数据是一项枯燥无味且花费巨大的任务 关键是现实场景中 往往无法标注足够的数据 而且模型的训练是极其耗时的 因此迁移学习营运而生 传统机器学习 主要指
  • markdown语法介绍

    目录 动态目录 toc 文章目录 目录 一 标题和文本 1 使用 和 标记一级和二级标题 2 使用 号标记 3 换行 二 文字标记和插入图片 链接 1 插入链接 2 插入图片 3 文字标记 设置文字 删除线 下划线 上标 下标 注释 4 e
  • Flip card 卡片翻转效果

    鼠标滑过 卡片翻转 如果想要点击卡片翻转的话就把 hover 改成 hover 然后自己添加点击事件 添加 class hover
  • Java序列化

    Java序列化 原理图 0bjectoutputstream java io 0bjectoutputstream extends outputstreamobjectoutputstream 对象的序列化流 作用 把对象以流的方式写入到文