序列流和反序列流

news2024/11/19 0:33:10

先看看它们在io体系中的位置:
Snipaste_2024-02-09_12-50-08.png
---------------------------------------------------------------------------------

序列化流:

可以将java中的对象写到本地文件中,
如这样的数据写到文件后变成这样----->
Snipaste_2024-02-09_12-51-04.pngSnipaste_2024-02-09_12-51-12.png
目的就是防止别人看得懂,修改本地文件

方法:
Snipaste_2024-02-09_12-54-07.png
步骤:
1.书写标准javabean并实现Serializable接口,创建javabean对象

  • 不实现接口输出会报错
  • 这个接口内无抽象方法,为标记型接口,一旦实现这个接口,那么就表示当前javabean可被序列化

2.创建序列化流对象

  • 注意参数填字节流,并关联目的文件

3.writeObject写入对象
4.关流

实例:
Student:

public class Student implements Serializable {

    private String name;
    private int age;
    
    public Student() {
    }
    public Student( String name, int age) {
        this.name = name;
        this.age = age;
    }
    //set、get、toString...
}

//创建学生对象
Student stu=new Student("zhangsan",23);
//创建序列化对象
//注意参数:放入字节流对象
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("..\\ioDemo\\student.txt"));
//写出学生对象
oos.writeObject(stu);
//关流
oos.close();

写出后:
image.png

反序列化:

可以把序列化到本地文件中的对象,读取到程序中来
方法:
image.png
步骤:
1.创建反序列化对象

  • 注意参数填字节流,并关联要反序列的文件
//创建反序列流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("..\\ioDemo\\student.txt"));
//读取
Object o = ois.readObject();
System.out.println(o);
                        //如要使用Student对象内的方法,要强转成Student类型
//关流
ois.close();

Student{name = zhangsan, age = 23}


一些细节:

当序列化对象后 改变了文件数据或改变了javabean的成员变量,会使反序列化报错。
如在这里增删数据:
image.png
或在这增删变量
image.png
只说在改变了javabean的成员变量,会使反序列化报错。这是为什么?

在创建javabean时java会根据成员方法、成员变量、静态变量、构造方法来生成一个序列号
image.png
当写入文件后,文件记录的序列号就固定了,若此时对javabean内容进行了修改,就会产生一个新的序列号,
这时进行反序列化,文件记录的序列号和javabean的序列号 对不上,所以报错。
解决:
可以在javabean中将序列号定为常量,就算改变了内容,序列号也不会再改变了
如图:
首先设置这两个选项
image.png
这时就会提示未定义序列号
image.png
这样就定下来了
image.png

瞬态关键字:
该类的所有字段都必须是可序列化的。如果一个字段不需要序列化,则需要使用transient 关键字进行修饰。
如:image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1443029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步,开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”(效果如下图所示)&#…

tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战(10)展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) ………… 结语 引言…

【Larry】英语学习笔记语法篇——换一种方式理解词性

目录 一、换一种方式理解词性 1、名词、形容词、副词,这就是一切 2、词性之间的修饰关系 3、介词其实很简单 形容词属性的介词短语 副词属性的介词短语 ①修饰动词 ②修饰形容词 ③修饰其他副词 一、换一种方式理解词性 1、名词、形容词、副词&#xff0c…

服务器内存使用率多少会影响正常访问?

在探讨服务器内存使用率多少会影响正常访问这个问题时,我们首先要明白,服务器的性能和稳定性与内存使用状况息息相关。当服务器的内存使用率过高时,可能会导致系统运行缓慢、程序崩溃或者出现其他一些异常情况,从而影响到正常的网…

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数,一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数,一个数据库能够支撑最大的连接数是多少呢? …

【开源】JAVA+Vue.js实现衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

干掉Xshell,这款开源的终端工具逼格真高!

GitHub 上已经有 53.7k 的 star 了,这说明 Tabby 非常的受欢迎: https://github.com/eugeny/tabby Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻…

《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)

文章目录 4.1 颜色理论在 CSS 设计中的应用:网页的调色盘4.1.1 基础知识4.1.2 重点案例:创建一个具有情感设计的登录页面4.1.3 拓展案例 1:使用颜色增强信息的可视化表示4.1.4 拓展案例 2:利用颜色创建网站的品牌身份 4.2 字体与文…

VMWare虚拟机安装

VMWare虚拟机安装 0.Linux运行平台介绍1. VMWare 虚拟软件安装检查虚拟网卡是否安装 创建VMWare虚拟机对创建虚拟机的内容进行设置挂在要安装的CentOS的ISO文件 0.Linux运行平台介绍 Linux的运行平台一共有两种,其中包括物理机平台和虚拟机平台,在学习阶段当中建议使用虚拟机 …

用的到的linux-查找find-Day4

前言: 在上一节,我们了解到rm删除命令,一共拥有三种模式,即-i默认只能删除文件且会提示确认,其次是-r 遍历删除,用于删除目录及目录下的文件,同样需确认后才会删除,最后为-f为强制删…

高级FPGA开发之基础协议PCIe(二)

高级FPGA开发之基础协议之PCIe(二) 一、TLP报文类型 在PCIe总线中,存储器读写、I/O读写和配置读写请求TLP主要由以下几类报文组成: 1.1 存储器读请求TLP和读完成TLP 当PCIe主设备(RC或者EP)访问目标设备…

【前端高频面试题--TypeScript篇】

🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 高频前端面试题--Vue3.0篇 什么是TypeScript?TypeScript数据类型TypeScript中命名空…

「daily updating」k3s + openfaas serverless bench 踩坑指南持续更新中

OpenFaas从入门到实战 – 踩坑指南 | k3dOpenFaas | deploy your first python function https://blog.alexellis.io/first-faas-python-function/ https://docs.openfaas.com/deployment/kubernetes/ 搭建环境:第一种方法失败,第二种方法…

CSP-202112-2-序列查询新解

CSP-202112-2-序列查询新解 【70分思路】 【暴力枚举】按照题目思路遍历一遍f(x)和g(x)&#xff0c;计算error(A)&#xff0c;时间复杂度为O(N)&#xff0c;时间超限。 #include <iostream> using namespace std; int main() {long long n, N, sum 0;cin >> n …

酷开科技,打造非凡的生活体验

酷开科技&#xff0c;作为一家专注于智能电视操作系统研发及智能电视运营增值服务的高科技企业&#xff0c;始终致力于为消费者提供非凡的生活体验。通过不断创新的技术和产品&#xff0c;酷开科技为消费者们带来了便捷、舒适、个性化的智能生活。 首先&#xff0c;酷开科技在智…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏11(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言选中效果 快捷栏显示对应的手臂工具源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中&#xff0c;我们将探索如何制作…

Leecode之环形链表进阶

一.题目及剖析 https://leetcode.cn/problems/linked-list-cycle-ii/description/ 这道题就是找到链表中环的入口 二.思路引入 假设起点到环的入口的距离为L, 环的长度为C, 入口到相遇点的距离为C - N 设定一个快慢指针,速度分别为2, 1 则有 (L kC - N) 2*(L C - N) 即…

spring上下文源码分析

请直接看原文: 原文链接: 一文搞懂Spring上下文生命周期 | spring系列第55篇-腾讯云开发者社区-腾讯云 (tencent.com) -------------------------------------------------------------------------------------------------------------------------------- 本文主要内容&a…

WWW 2024 | 时间序列(Time Series)和时空数据(Spatial-Temporal)论文总结

WWW 2024已经放榜&#xff0c;本次会议共提交了2008篇文章&#xff0c;research tracks共录用约400多篇论文&#xff0c;录用率为20.2%。本次会议将于2024年5月13日-17日在新加坡举办。 本文总结了WWW 2024有关时间序列&#xff08;Time Series&#xff09;和时空数据&#xf…

VED-eBPF:一款基于eBPF的内核利用和Rootkit检测工具

关于VED-eBPF VED-eBPF是一款功能强大的内核漏洞利用和Rootkit检测工具&#xff0c;该工具基于eBPF技术实现其功能&#xff0c;可以实现Linux操作系统运行时内核安全监控和漏洞利用检测。 eBPF是一个内核内虚拟机&#xff0c;它允许我们直接在内核中执行代码&#xff0c;而无…