java序列化与反序列化

java中序列化与反序列化

概念

在Java中,序列化是指将对象转换为字节流的过程,而反序列化则是将字节流转换回对象的过程。序列化和反序列化通常用于在网络上传输对象或将对象持久化到磁盘上。

要对一个对象进行序列化,可以使用ObjectOutputStream类。该类提供了writeObject()方法,可以将对象转换为字节流并写入到输出流中。

要对一个字节流进行反序列化,可以使用ObjectInputStream类。该类提供了readObject()方法,可以从输入流中读取字节流并转换为对象。

序列化:
ObjectOutputStream --> writeObject()
反序列化: 
ObjectInputStream --> readObject()  

什么是反序列化漏洞

java中的反序列化漏洞,由于开发者重写了readobject()方法,在该方法里面存在执行代码,在重写的readobject()方法中执行了链式调用,最终执行到了危险函数的位置

代码演示

先定义类 serialize,deserialize,test1,person

代码中如果报错,一般为没有导包,鼠标点过去然后alt+enter即可

serialize

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class serialize implements Serializable {public static void serialize1(Object obj, String filePath) throws IOException {try (FileOutputStream fileOut = new FileOutputStream(filePath);ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)){objectOut.writeObject(obj);}}}

deserialize

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;public class deserialize implements Serializable {public static Object deserialize1(String filePath) throws IOException, ClassNotFoundException {try (FileInputStream fileIn = new FileInputStream(filePath);ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {return objectIn.readObject();}}
}

person

import java.io.Serializable;public class person implements Serializable {public String name="order";public int age=20;}

test1

序列化时

import java.io.*;
public class test1 {public static void main(String[] args) throws IOException, ClassNotFoundException {person person1=new person();serialize seri=new serialize();serialize.serialize1(person1,"order.bin");}}

然后会在当前目录生成一个order.bin文件

查看内容为序列化的结果

image-20231122190204725

反序列化时

import java.io.*;
public class test1 {public static void main(String[] args) throws IOException, ClassNotFoundException {person person1=new person();deserialize seri1=new deserialize();System.out.println("反序列化结果:" + deserialize.deserialize1("order.bin"));}}

反序列化结果如图

image-20231122190444785

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

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

相关文章

github访问失败

1. 问题场景 今天了解到notepad可以安装许多插件,但是自动下载插件时总是失败,这些插件的下载源都是github,将地址复制到浏览器也打不开,所以查了下github的访问问题,目前插件已正常下载。 2. 解决方法 gitee上搜索…

facebook如何群发小组贴

Facebook是一款非常流行的社交媒体平台,它可以让人们与朋友、家人和同事进行交流和分享。在Facebook上,用户可以加入各种小组,与志同道合的人交流和分享。而群发小组贴是一种在小组内发布消息的方式,让小组的成员都能够收到消息。…

BUUCTF [SWPU2019]神奇的二维码 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 下载附件,得到一个.png图片。 解题思路: 1、使用QR research扫一下,得到“swpuctf{flag_is_not_here}”的提示。 2、放到0…

orvibo的Mini网关VS20ZW玩法

概述 闲鱼淘来一个2016年生产的网关,此网关的型号:VS20ZW。 已经不能用APP入网了,没事拆来玩玩。 此设备已经被淘汰,很多新的zigbee产品不再支持入网。 官网设备的简介: ZigBee Mini网关,智能家居网关,智能家居主机|ORVIBO欧瑞博智能网关 设备概貌: 主要器件: …

微信小程序 获取微信头像和昵称的低版本兼容问题

<template> <uni-forms-item label"头像" nameimg><!-- #ifndef MP || MP-WEIXIN --><view click"addFile1"><u-avatar size"46":src"this.$utils.baseUrl/file/download/customFormData.avatar"></…

Uptime Kuma 企业微信群机器人告警

curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa \-H Content-Type: application/json \-d {"msgtype": "text","text": {"content": "hello world"}}企业微信群机器人ke…

PowerQuery领域的经典之作“猴子书“中文版来啦!

与数据打交道&#xff0c;还在纠结于Excel、SQL、VBA、Python&#xff1f;数据处理领域经典之作PowerQuery"猴子书"让你用更聪明的方法处理数据。学完这本书&#xff0c;你就掌握了Power Query的一切&#xff0c;想要学Power Query&#xff0c;只需要这一本就够啦&am…

Hotspot启动原理(三)

关于Hotspot虚拟机的启动原理和内部运行机制。Hotspot虚拟机是Java虚拟机的一种实现&#xff0c;它采用了基于类的技术&#xff0c;在运行时将Java字节码转换为机器码并执行。在Hotspot虚拟机的启动过程中&#xff0c;会经历一系列的过程 包括JVM初始化、类加载、字节码解释执…

POL890 LVDSRGB TO MIPILVDS

一、芯片简介 1、系统 高性能 MIPS 32bit CPU 内核&#xff1b; 高性能 DSP 内核图像处理单元&#xff1b; 16KB 指令 Cache&#xff1b; 16KB 数据 Cache&#xff1b; 128KB OnChip SRAM&#xff1b; 内嵌 DDR3 控制器&#xff1b; 2、RGB 输入 支持 RGB666、RGB888 输入&…

万字解析设计模式之组合模式、亨元模式

一、组合模式 1.1概述 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构&#xff0c;以表示“部分-整体”的层次结构。组合模式使得客户端可以一致地对待单个对象和对象组合&#xff0c;从而将复杂的层次结构展现为一个统一的树形结构。 在组合模式中&…

设计模式-16-Spring源码中的设计模式

1-Spring之观察者模式 Java、Google Guava都提供了观察者模式的实现框架。Java提供的框架比较简单&#xff0c;只包含java.util.Observable和java.util.Observer两个类。Google Guava提供的框架功能比较完善和强大&#xff1a;通过EventBus事件总线来实现观察者模式。实际上&am…

表格制作软件排行榜,热门做表格的软件推荐

在数字化时代&#xff0c;表格不仅仅是企业管理和数据整理的重要工具&#xff0c;更是学术研究、项目规划以及日常生活中必不可少的一部分。为了更高效地进行表格制作&#xff0c;选择一款优秀的表格制作软件是至关重要的。在众多的软件中&#xff0c;我们特别推荐一款备受好评…

java.lang.IllegalStateException: Can not add resource

安卓解决 java.lang.IllegalStateException: Can not add resource 放两个链接 解决Can not add resource (com.android.aaptcompiler.ParsedResourcea980fbb) to table_言并肃的博客-CSDN博客 android attr何时会冲突_android attr冲突-CSDN博客 然后去新增的依赖找资源…

(01)vite 从启动服务器开始

文章目录 前言在浏览器中使用es模块初始化环境vite依赖预构建解决了什么问题创建vite.config.js配置vite为什么vite.config.js可以用esmodule规范 前言 Vite&#xff08;发音为"veet"&#xff09;是一种现代化的前端构建工具&#xff0c;旨在提供快速的开发体验。它…

使用Python进行特征选择

在机器学习中&#xff0c;特征选择是从数据集中可用的特征中选择相关和重要特征&#xff08;变量或属性&#xff09;的子集的过程。选择特征的目的是通过减少数据的维度&#xff0c;同时保留最具信息性和相关性的特征&#xff0c;来提高机器学习模型的性能。 什么是特征选择&a…

【Java】用Java库中自带的阻塞队列以及用阻塞队列实现生产者-消费者模型

1、阻塞队列(BlockingDeque) 首先我们来认识一下什么是堵塞队列 阻塞队列即实现了线程安全和阻塞的队列。在队列为空时&#xff0c;获取元素的线程会等待队列存放元素变为非空&#xff1b;在队列满时&#xff0c;存放元素的线程会等待队列取出元素变为不满。 阻塞队列常应用于生…

盖雅绩效应用通过SAP认证并斩获创新方案奖

近日&#xff0c;在「不啻微芒 造炬成阳」为主题的SAP合作伙伴创新大赛上&#xff0c;盖雅工场「G移动绩效创新方案」荣获创新解决方案奖。该方案核心是一款基于SAP SuccessFactors套件及SAP BTP平台的扩展应用&#xff0c;主要针对一线人员绩效管理场景&#xff0c;借助简洁的…

Elasticsearch中的语义检索

一、传统检索的背景痛点 和传统的基于关键词的匹配方式不同&#xff0c;语义检索&#xff0c;利用大模型&#xff0c;将文本内容映射到神经网络空间&#xff0c;最终记忆token做检索。 例如想要搜索中国首都&#xff0c;例如数据集中&#xff0c;只有一篇文章在描述北京&#x…

【NLP】培训LLM的不同方式

在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途&#xff0c;因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中&#xff0c;我想概述一些最重要的训练机制&#xff0c;包括预…

「Verilog学习笔记」根据状态转移图实现时序电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机&#xff1a;即输出不仅和当前状态有关&#xff0c;也和输入有关。 其中ST0&#xff0c;ST1&#xff0c;ST3的…