java的序列化与反序列化

news2024/11/23 12:40:58

什么是序列化与反序列化

序列化:

        说白了,就是把一个实现了Serializable接口(只有实现了这个接口的类才能被序列化与反序列化)的类去变成本地文件保存。

反序列化:

        说白了,就是把上面保存的本地文件,一般保存为.ser后缀名的文件,通过对象输入流,给加载到内存里面去

几个与序列化、反序列化相关的对象

一、关于序列化的对象 

 

 

说明一下: 

 ObjectOutputStream,这个一般考虑为把一个对象写入到指定流里面,它的构造函数里面传递的是一个OutputSream流,也就是说,里面可以传入本地的字节输出流比如FileOutputStream,然后把这个对象写入到本地文件中。序列化就可以采用这种操作

另外就是,我们还可以把这个对象写入到ByteArrayOutputStream流中,这个对象里面维护了一个自动增长的缓冲数组。

二、关于反序列化的对象

其实就是上面介绍对象的输入流,因为要把文件输入到内存中

  

 

 说明一下:上面的ObjectInputStream对象的构造方法中,是传入一个字节输入流对象的,一般反序列化我们是从本地找文件,也就是利用FileInputStream来获取文件,然后解析。但是也可以传入一个ByteArrayInputStream流,这个里面就会传入一个之前放到ByteArrayOutputStream流中的byte数组,然后可以拿过来解析

备注:不想被序列化的属性可以用transient关键字进行修饰 

序列化与反序列化的具体操作

序列化,直接上操作代码

Serialization1.java

package pxx;

import java.io.*;

public class Serialization1 {
    public static void main(String[] args) {
        Person person = new Person("张三丰",20,180);
        //直接采用try-with-resources
        try (FileOutputStream fis = new FileOutputStream("D:\\person.ser");
             ObjectOutputStream objectOutputStream = new ObjectOutputStream(fis)){
            objectOutputStream.writeObject(person);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 现在去看在D盘生成的文件

这个文件你不用打开看,打开也看不懂,只有通过反序列化解析出来才能看

下面再来进行反序列化操作

Deserialization1.java

package pxx;

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

public class Deserialization1 {
    public static void main(String[] args) throws IOException {
        Person person = null;
        try ( FileInputStream fis = new FileInputStream("D:\\person.ser");
              ObjectInputStream objectInputStream = new ObjectInputStream(fis)){
            person = (Person)objectInputStream.readObject();
            System.out.println(person);//直接打印出来
        } catch (FileNotFoundException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

 运行结果:

好了,说到这,祝早安午安晚安。 

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

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

相关文章

LeetCode62. 不同路径(java解法——动态规划)

1 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径&#xff1f…

电脑一键重装一直在系统优化升级怎么办

小白一键重装一直在系统优化升级怎么办?电脑总是卡在这个画面上,遇到这种情况该怎么解决呢?遇到这种情况大家也不要慌,小面小编就来演示下如何解决小白一键重装一直在系统优化升级的问题。 工具/原料: 系统版本:win10家庭版 …

电脑免费录屏软件哪个好用?分享3款,亲测好用

相比于图片,视频给人的感受更加通俗易懂,短短几分钟的视频,就能将几十张图片想要表达的意思给表达出来。电脑录屏正是制作视频的其中一部分,但也有不少的小伙伴对于电脑录屏不太熟悉,希望小编分享一些电脑免费录屏软件…

HTML语法学习以及作业解答

文章目录技巧html标签练习作业01作业02作业03作业04作业05作业06作业07作业08作业09作业10技巧 1 输入 html5即可补全出html的骨架,或者是! tab键 2 MDN网站:https://developer.mozilla.org/zh-CN/ 3 div带回车,span后面不带回…

计组 | DRAM芯片、多模块存储器、加法器标志位、软件硬件的关系、扩展操作码、程序转换过程

内容来自 —— 王道 自用学习笔记整理 一、DRAM芯片与内存条 1.1、DRAM芯片 1.2、访问内存时DRAM芯片读取过程 多个芯片并行传输,每一轮每个芯片的行列都相同,n个芯片就会有n个超元 n个超元加起来就是数据总线的长度,如图中超元=8位,数据总线=8个超元=64位 1.3、DRAM引脚数…

使用Apifox创建Mock智能操作

去接口管理新建一个接口来设计 然后直接保存运行,就可以发现已经自动为我们的Mock添加上了相关的属性值,只需要输入相关的字段名就可以了。 设置自定义智能Mock,之前我们智能Mock生成的数据都是通过这个工具实现的。只要你的值匹配上了就会通…

从数据治理到数据应用,制造业企业如何突破数字化转型困境丨行业方案

我国制造业拥有31个大类、179个中类和609个小类,是全球产业门类最齐全、产业体系最完整的制造业。作为世界工厂,中国制造业在拉动本国经济增长、促进本国就业等方面贡献卓越,更是我国民生消费的底层基础。同时,中国从原来的原料出…

OpenSSL QuickStart

文章目录1. Windows环境PerlnasmOpenSSL编译VS测试项目2. Linux环境编译测试项目参考资料1. Windows环境 Windows 10VS 2019nasm汇编工具:https://nasm.us/Perl: 官网地址https://www.perl.org/get.htmlOpenSSL: 官网地址:https://www.opens…

2022下半年软件设计师备考经验帖

祝大家逢考必过 7月1号备考-11月05号考试 推荐up主:zst_2001 跟着视频来基本必过 以下是复习资料 章节章节01 - 计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - …

垂直领域问答小程序开发,打开知识领域无限能量

知乎作为一款问答类app,深受大众信赖,知乎构建了一个人人都可以便捷接入的知识分享网络,让人们便捷的与世界分享知识、经验和见解,让我们发现更大的世界。知乎的成功让很多人看到了垂直领域问答小程序存在的商机,想要进…

[JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图&#x…

全国制造业新产品开发流程管理(甄选班)招生简章

近来,越来越多的TO C企业已经将业务从C端转型到了B端,而传统的市场品牌部门除了品牌相关的工作,也将会越来越多承担企业“增长”的业务;“营”与“销”脱节的是市场部门也越来越受到了Diss。 那么,To B产品经理能力提…

package xxx does not exist

1、开发环境如下: gradle 7.3.3: gradle插件:7.2 AS: 2、报错日志 /Users/andrew/Documents/React/Code/TestRetrofit/app/src/main/java/com/lwd/testretrofit/MainActivity.java:8: error: package com.lwd.testretrofit.lwd does not e…

如何用好图表?

如何选择合适的图表? 在可视化图表中,基于不同的目的,我们要选择不同的图表 一般情况下,我们需要借助图表达成4个目的:展示比较,展示分布,展示联系,展示构成 一.作用 1.展示比较 …

数据结构-克鲁斯卡尔算法,普利姆算法(求最小生成树)

当然了昨天晚上写了求两源点之间最少权值和,就不得不再写一下另外两个求最小生成树的算法分别是克鲁斯卡尔和普利姆了,话不多说直接进入主题 目录 并查集: 克鲁斯卡尔算法(与并查集结合起来): 普利姆算法: 并查集&a…

[附源码]Python计算机毕业设计高校教学过程管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

产品诚可贵,质量价更高

产品诚可贵,质量价更高缘起所属行业研发人员规模所在团队规模团队开发模式产品类别软件主体层次软件交付周期软件需求质量/感受/问题设计质量保证及好与不好开源组件代码质量千行缺陷数单元测试代码覆盖率和测试质量质量文化和QA人员测试团队人员配置质量工程活动功…

第4篇:嵌入式Linux应用开发基础知识

嵌入式Linux应用开发基础知识一、GCC编译过程二、MakefileMakefile的引入及规则Makefile的语法a. 通配符b. 假想目标: .PHONYC. 变量Makefile函数函数foreach函数filter/filter-outWildcardpatsubst函数Makefile实例通用MakefikeMakefikeMakefile.build说明.txt三、TCPserver.c…

springMVC+mysql实现的Java web图书管理系统源码+运行教程+参考论文

今天给大家演示的是一款由srpingMVC实现的Java web图书管理系统,本项目功能非常丰富,且附带配套论文及视频指导配置运行教程,系统实现的功能主要有:图书馆里、图书分类管理、出版社管理、图表图书统计展示、用户管理、角色管理、权…

小村庄迸发大能量,桃浦村“藏”着花样经,“烘”出财富来

从几人的小公司到产税千万级的高新技术和数集团企业总部;从拿着10万元注册资金开公司处处碰壁的小公司到家喻户晓的国牌护肤品林清轩……在普陀区桃浦镇的桃浦村,默默“耕耘”出了一家家优秀的民营企业。 筑巢引凤聚人才,注入乡村振兴新动能。在上海市委…