shiro反序列化原理(反序列化是什么意思)

2024-07-14 04:27:25 20

shiro反序列化原理(反序列化是什么意思)

本文目录

反序列化是什么意思

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

java resolve

java resolve是什么?让我们一起来了解一下吧! 原理: 反序列化时,首先获取序列化的类 : desc( 可理解为单例类的class类,但它和JVM加载到内存中的单例class类有不同)因为如果我们的单例类在构造方法中通过实例不为空则抛出异常防止了反射破坏单例,那单例类是不允许再实例化的。而desc类却依然可以实例化。(当我们反序列化一个对象时,永远不会调用其类的构造函数,反序列化后的实例变量与序列化之前的实例变量相同,类变量与当前的类变量相同,如果反序列化时类未被加载则类变量为默认值。) 判断对象是否能实例化。可以则进行实例化,至此单例类进行了第一次实例化,对象名为obj。第一次实例化完成后,通过反射寻找该单例类中的readResolve()方法,没有则直接返回obj对象。有定义readResolve()方法,desc通过invokeReadResolve(Object obj)方法调用readResolve()方法获取单例对象instance,将他赋值给rep,如果单例对象之前已经被实例化过,那么rep就会指向之前实例化的单例对象。如果我们之前没有实例化单例对象,则rep会指向null。 rep与obj进行比较,由于obj是反射获取的对象,当然与rep不等,于是将rep的值instance赋值给obj,将obj返回,返回对象instance也就保证了单例。java resolve是从序列化中恢复一个单例对象会破坏单例模式,解决方法是添加readResolve() :通过反序列化readObject()方法获取对象时会去寻找readResolve()方法,如果该方法不存在则直接返回新对象,如果该方法存在则按该方法的内容返回对象,以确保如果我们之前实例化了单例对象,就返回该对象。如果我们之前没有实例化单例对象,则会返回null。 实战演练,具体步骤如下所示: package com.singleton;   import java.io.ObjectStreamException; import java.io.Serializable;   /**  * 懒汉单例设计模式案例  */ public class SingletonDemo implements Serializable {      /**  * 懒加载  */ private static SingletonDemo instance;       /**      * 私有构造器      */ private SingletonDemo() { // 防止通过反射实例对象而跳过getInstance()方法 if (instance != null) { throw new RuntimeException("Object has been Instance !!!"); } }   /**  * 调用方法才加载类,资源利用率高了,但要保证线程安全  */ public static synchronized SingletonDemo getInstance() { if (instance == null) { instance = new SingletonDemo(); } return instance; }   /**  * 提供readResolve()方法  * 当JVM反序列化恢复一个新对象时,系统会自动调用readResolve()方法返回指定好的对象  * 从而保证系统通过反序列化机制不会产生多的Java对象  *  * @return 单例对象  * @throws ObjectStreamException 异常  */ private Object readResolve() throws ObjectStreamException { return instance; } } package com.singleton;   import org.junit.Test;   import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream;   /**  * 单例测试类  */ public class SingletonTest {   /**  * 测试方法  */ @Test public void test() throws Exception { // 获取instance对象 SingletonDemo instance = SingletonDemo.getInstance();   // 获取文件输出流 FileOutputStream fileOutputStream = new FileOutputStream("E:\\Test.txt"); // 获取对象输出流 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);   // 输出对象 objectOutputStream.writeObject(instance);   // 关闭资源 objectOutputStream.close(); fileOutputStream.close();   // 获取对象输入流 ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("E:\\Test.txt"));   // 读取对象 Object object = objectInputStream.readObject();   // 判断两个对象是否相等,返回true/false System.out.println(instance == object); }   }

什么是对象序列化(Serialization)和反序列化(Deserialization)

【答案】:Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等。因此,序列化可以看成是为了把对象存储在磁盘上或者是从磁盘上读出来并重建对象而把对象扁平化的一种方式。反序列化是把对象从扁平状态转化成活动对象的相反的步骤。

java里为什么反系列化能调用私有属性和方法

序列化可以将内存中的类写入文件或数据库中。比如将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。看了这个解释你应该明白了吧,序列化就是把实例化过的对象保存起来,反序列化就是把这个对象再拿出来用,因此你所谓的调用私有方法应该是调用该对象自身类的私有方法

什么是java序列化,如何实现java序列化

在java中只要一个类实现了Serializable接口的类就被认为是序列化的类,这种类的对象就是序列化的对象只有被序列化的数据才允许被存储到文件、数据库之中或者通过网络协议进行传输,没有被序列化的数据是不能存储到硬盘上,不能通过网络协议进行网络传输

shiro反序列化原理(反序列化是什么意思)

本文编辑:admin

更多文章:


java instanceof(java 编程instanceof 操作符)

java instanceof(java 编程instanceof 操作符)

这篇文章给大家聊聊关于java instanceof,以及java 编程instanceof 操作符对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录java 编程instanceof 操作符JAVA的instanceOf什么时

2024年7月30日 03:40

滚动的天空网页编辑器(滚动的天空自制版0.4b,在哪下载)

滚动的天空网页编辑器(滚动的天空自制版0.4b,在哪下载)

本文目录滚动的天空自制版0.4b,在哪下载以前一个游戏是单机游戏,可以手指滑动,游戏名什么什么传滚动的天空制作器叫什么名字滚动的天空v3.7.6视界巡航怎么下载滚动的天空地图器怎么用教程滚动的天空饭制怎么进去如何使用文本编辑器制作一个网页滚

2024年6月16日 03:05

clipboardproxy插件怎么安装(怎么安装插件,装到哪里)

clipboardproxy插件怎么安装(怎么安装插件,装到哪里)

大家好,关于clipboardproxy插件怎么安装很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎么安装插件,装到哪里的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位

2024年8月15日 03:55

计算机二级报名官网(大学生计算机二级报名入口)

计算机二级报名官网(大学生计算机二级报名入口)

大家好,如果您还对计算机二级报名官网不太了解,没有关系,今天就由本站为大家分享计算机二级报名官网的知识,包括大学生计算机二级报名入口的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录大学生计算机二级报名入口计算机二级

2024年7月31日 01:30

switch的相关短语用法(switch语句怎么用啊 具体)

switch的相关短语用法(switch语句怎么用啊 具体)

本文目录switch语句怎么用啊 具体switch做动词的用法请举例=switch什么意思switch的短语switch做动词的用法请举例 切换,转变 怎么用switch 语句 到底有哪些用法 这样使用它switch的用法switch语句怎

2024年7月2日 05:52

if if else怎么执行(在c语言程序中if-else语句的else语句总是不执行是怎么回事)

if if else怎么执行(在c语言程序中if-else语句的else语句总是不执行是怎么回事)

本文目录在c语言程序中if-else语句的else语句总是不执行是怎么回事想请教c语言这种if--else语句如何执行假如: int a=0; if(a==0) {a=1;执行if-else选择结构执行的顺序是什么在c语言程序中if-els

2024年7月22日 08:47

fortune是什么轮胎(fortune是什么轮胎)

fortune是什么轮胎(fortune是什么轮胎)

大家好,如果您还对fortune是什么轮胎不太了解,没有关系,今天就由本站为大家分享fortune是什么轮胎的知识,包括fortune是什么轮胎的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录fortune是什么轮

2024年9月5日 03:45

cstring数组定义(MFC如何定义CString类型的数组)

cstring数组定义(MFC如何定义CString类型的数组)

本文目录MFC如何定义CString类型的数组CString类型数组CString 放到数组中CString 数组请教使用CString类或CStringArray类定义字符串数组怎么声明CString数组MFC如何定义CString类型的

2024年7月19日 09:24

sqlserver备份表语句(SQLSERVER2005如何备份部分表中的部分数据)

sqlserver备份表语句(SQLSERVER2005如何备份部分表中的部分数据)

“sqlserver备份表语句”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看sqlserver备份表语句(SQLSERVER2005如何备份部分表中的部分数据)!本文目录SQLSERVER2005如何备份部分表中的部分数据

2024年8月3日 16:25

memory按键是什么意思(memory按键是什么意思)

memory按键是什么意思(memory按键是什么意思)

本文目录memory按键是什么意思山水T一77收音头MEMORY按键是什么用意MEMORY/SET键音响中代表什么memory电子温湿度计是什么意思录音机上的memory是什么意思计算器上的M+、M-键是什么意思怎么使用我家电子钟只有MOD

2024年6月27日 08:29

杭电官网手机版(杭电线下复试成绩占比)

杭电官网手机版(杭电线下复试成绩占比)

其实杭电官网手机版的问题并不复杂,但是又很多的朋友都不太了解杭电线下复试成绩占比,因此呢,今天小编就来为大家分享杭电官网手机版的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录杭电线下复试成绩占比杭州电子科技大学论

2024年9月5日 19:10

web前端开发就业(学web前端好找工作吗 就业方向有哪些)

web前端开发就业(学web前端好找工作吗 就业方向有哪些)

本文目录学web前端好找工作吗 就业方向有哪些web前端就业前景如何web前端开发工程师就业前景WEB前端就业前景好不好学web前端好找工作吗 就业方向有哪些 web前端开发工程师已成为当下炙手可热的岗位之一,大中型企业对前端开发人才的需求

2024年7月23日 10:59

用户管理系统登录(智能远程管理系统怎么登录)

用户管理系统登录(智能远程管理系统怎么登录)

本文目录智能远程管理系统怎么登录系统管理员账户Administrator的登录密码忘记了,怎么才能登录该账户怎么才能登陆户户通用户管理系统怎样以管理员身份登录系统千聊直播间的用户管理系统怎么进入户户通管理系统登录智能远程管理系统怎么登录智能

2024年5月14日 16:00

access2007教程(数据库应用Access2007实例教程的内容简介)

access2007教程(数据库应用Access2007实例教程的内容简介)

本文目录数据库应用Access2007实例教程的内容简介Access 2007如何做下拉列表如何修复Access数据库_Access数据库教程数据库应用Access2007实例教程的内容简介Microsoft Access 2007是Off

2024年5月2日 14:07

obtain什么意思中文(获得的英文)

obtain什么意思中文(获得的英文)

本文目录获得的英文obtain,get,gain有什么区别get ,obtain,acquire,gain这四个有什么区别obtain什么意思obtain attain gain的区别获得的英文obtain英   1、vt.获得,得到;达到

2024年7月13日 22:54

java开发需要算法吗(对于JAVA程序员来说算法重要吗)

java开发需要算法吗(对于JAVA程序员来说算法重要吗)

本文目录对于JAVA程序员来说算法重要吗学java是否要学算法用java语言的程序员是不是很少用到算法java 什么样的项目需要大量算法学习java编程时,什么时候学习算法好点java编程 算法重要吗java程序员需要非常精通算法吗哪些JA

2024年7月24日 16:58

NBA历年来总冠军是谁?勇士八年哪四次夺冠

NBA历年来总冠军是谁?勇士八年哪四次夺冠

本文目录NBA历年来总冠军是谁勇士八年哪四次夺冠勇士队史共获得了几个总冠军勇士几个冠军库里带领勇士赢得几次总冠军2022nba总冠军是谁nba历届总冠军一览杜兰特拿了几个总冠军勇士几个总冠军mvpNBA历年来总冠军是谁NBA历年来的总冠军如

2024年7月23日 06:53

dreamweavercs6官网下载(求给个dreamweaver cs6 下载地址)

dreamweavercs6官网下载(求给个dreamweaver cs6 下载地址)

本文目录求给个dreamweaver cs6 下载地址dw下载中文版免费cs6Dreamweaver CS6下载急急,dreamweaver cs6官方中文版在哪里下载,能不能给我,是不是要安装jquery插件求给个dreamweaver

2023年7月25日 17:00

xx net(linux怎样安装xx-net)

xx net(linux怎样安装xx-net)

本文目录linux怎样安装xx-netXX-net找不到可用IP了,有人遇到这个情况吗xx-net部署服务端appid无效是怎么回事如何使用XX-Net实现访问真正的互联网XX-Net 3.2.9 网络无法连接,请检查网络和防火墙设置如何使

2023年6月2日 10:40

swoole协程(怎样成为IT架构师)

swoole协程(怎样成为IT架构师)

本文目录怎样成为IT架构师为什么说Swoft是PHP界的Springboot国外都有哪些php协程框架swoole_table可以实现没有关系的进程之间的通讯吗为什么php自带的socket不怎么听说,基本都是用swoole,workerm

2024年6月27日 10:49

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索