java序列化与反序列化

java序列化与反序列化

 

        public interface Serializable类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

 

        序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
  
        序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例
  
        序列化有什么特点:
  
        如果某个类能够被序列化,其子类也可以被序列化。

 

        声明为static和transient类型的成员数据不能被序列化。
    
        static是类共享的,当该类一个对象被序列化后,这个static变量可能会被另一个对象改变,所以这决定了静态变量是不能序列化的,但如果是final,就可以,因为这是一个常量。

 

        如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

 

        什么时候使用序列化:

 

        对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

 

        java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

 

import java.io.Serializable;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class Person implements Serializable{

	private static final long serialVersionUID = -399858645849256406L;
	
	private String name;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

/**
 * 序列化与反序列化
 * @author InJavaWeTrust
 *
 */
public class TestPerson {
	
	public static void main(String[] args) {
		Person person = new Person();
		person.setName("java");
		person.setSex("F");
		File file = new File("d:\\person.txt");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			//序列化
			OutputStream os = new FileOutputStream(file);
			ObjectOutputStream oos = new ObjectOutputStream(os);
			oos.writeObject(person);
			oos.flush();
			oos.close();
			os.close();
			//反序列化
			InputStream is = new FileInputStream(file);
			ObjectInputStream ois = new ObjectInputStream(is);
			Person per = (Person) ois.readObject();
			System.out.println("name[" + per.getName() + "]");
			System.out.println("sex[" + per.getSex() + "]");
			ois.close();
			is.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

}
 
漫谈Java反序列化 Java的反序列化漏洞探索出了Java安全的新纪元。开发人员为什么要反序列化呢? 阅读详情

相关推荐

In-java-we-trust:我们的java项目

在我们信任的 Java 中

Java Lambda csnd

Java Lambda csnd package org.xcysj; import java.util.ArrayList; import java.util.List; public class TestLambda { public static List<Apple> filterGreenApples(List<Apple> inventory) { List<Apple> result = new ArrayList<>();

2万+

第五节 Amesim《直动型溢流阀HCD建模》HCD5 学习资料

利用HCD原则创建直动型溢流阀的界面。这可能包括图形化表示直动型溢流阀的工作原理、操作方式和调节方法。这样的界面应当直观且易于理解,使用户能够轻松了解阀门的功能和使用方法。

m0_58052642的博客 1330

TemporalAdjusters.lastInMonth

TemporalAdjusters.lastInMonth /** * 获取一个新的日期,它的值为指定日期同一个月中,最后一个符合星期几要求的值 * @param date 指定日期 * @param dayOfWeek 星期几 * @return YYYY-MM-DD */ public String getLastInMonth(LocalDate date, DayOfWeek dayOfWeek) { return date.with(TemporalAdjuste.

4万+

高德地图可视化入门:零基础用Python+高德API打造你的第一个热力图

本文详细介绍了如何使用Python和高德地图API从零构建商业级热力图。通过环境配置、地理编码、数据清洗到最终可视化展示的全流程指南,帮助开发者快速掌握地图可视化技术,特别适合展示商圈人流、疫情热点等地理分布数据。

weixin_29053067的博客 307

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 498

TemporalAdjusters.firstDayOfMonth

TemporalAdjusters.firstDayOfMonth /** * 获取一个新的日期,它的值为指定日期当月的第一天 * @param date 指定日期 * @return YYYY-MM-DD */ public String getFirstDayOfMonth(LocalDate date) { return date.with(TemporalAdjusters.firstDayOfMonth()).toString(); } ...

4万+

用Python turtle库 绘制皮卡丘

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne...

qq_36295856的博客 2万+

序列化的作用及反序列化

一、序列化的定义 序列化就是将一个对象状态(各个属性量)保存起来,然后在适当的时间在获取 序列化分为:序列化和反序列化。 序列化是将数据分解成字节流,以便存储在文件中或在网络上传输。 反序列化就是打开字节流并重构对象。 二、序列化的特点 如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient...

m0_45230978的博客 1448

把 SAP Fiori Launchpad 配置文件放进 MIME Repository:从上传、缓存控制到可访问路径的完整实践

文章摘要: 在 SAP Fiori 项目中,Launchpad 配置文件的部署是关键挑战,核心在于通过 MIME Repository 而非直接修改标准文件来实现稳定配置。与 BSP Repository 相比,MIME Repository 支持显式设置客户端缓存时间(如 SAP 推荐的 7 天),适合生产环境治理。配置文件需为 JSON 格式,部署时需确保路径可访问(通过 ICF node 和 external alias),并注意语法错误会导致静默失效。实操步骤包括:在 SE80 中创建专用目录、设置

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 94

Ego Planner规划算法(上)——Ego Planner流程介绍

本系列文章用于学习记录Ego-Planner规划算法的相关内容,本系列文章是在在Fast Planner规划算法系列文章的基础上,展开对Ego Planner的相关介绍,主要包括Ego Planner算法流程和程序框架两部分,主要学习资料是深蓝学院的移动机器人运动规划课程

慕羽★的博客 1万+

获取一个新的日期,它的值为指定日期当月的第一天

获取一个新的日期,它的值为指定日期当月的第一天 /** * 获取一个新的日期,它的值为指定日期当月的第一天 * @param date 指定日期 * @return YYYY-MM-DD */ public String getFirstDayOfMonth(LocalDate date) { return date.with(TemporalAdjusters.firstDayOfMonth()).toString(); } ...

4万+

YOLOv11改进 | Conv改进篇 | 含2种改进,引入DynamicConv替换普通Conv卷积下采样和C3k2_DynamicConv替换C3k2(来自CVPR2024)

本文提出了一种基于DynamicConv动态卷积优化的YOLOv11轻量化模型改进方案。通过引入多专家机制的动态卷积模块,在增加模型参数量的同时保持较低的计算复杂度(FLOPs),有效解决了低FLOPs模型在大规模预训练中的性能瓶颈问题。文章详细介绍了动态卷积的工作原理、核心代码实现,并提供了在YOLOv11中集成DynamicConv和C3k2_GhostModule_DynamicConv模块的完整教程,包括模块添加、配置文件修改和模型训练验证过程。实验结果表明,该方案在保持高效推理速度的同时显著提升了

Ai缝合怪、助力小伙伴高效发论文 538

Java序列化与反序列化

java序列化 与反序列化知识点

qq_44885775的博客 7655

把数据库算力拉满的 ABAP CDS Table Function:从语法、权限到可运行样例的全景解析

文章摘要: 本文针对ABAP开发者探讨了CDS Table Function的应用场景与实现细节。当CDS View无法处理复杂计算(如窗口函数、递归等)时,可通过Table Function将逻辑下推到HANA数据库执行。关键点包括:1)CDS实体声明与AMDP实现的协作关系;2)多租户环境下的Client处理机制(@ClientHandling.type注解);3)激活与传输的阶段性特点可能导致的"暂不可用"问题;4)基于SFLIGHT的完整示例,展示如何定义Client依赖函数、实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 308

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java之序列化与反序列化

序列化与反序列化的理解

m0_73866527的博客 1683

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java序列化与反序列化详解

serialVersionUID - 0x0e 76 fa 9f 59 73 be c6 是16进制转换为二进制,就是生成的值transient修饰的变量不能被序列化;transient只作用于实现 Serializable 接口;transient只能用来修饰普通成员变量字段;不管有没有 transient 修饰,静态变量都不能被序列化;

pyth0zn的博客 4562

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java 反序列化

反序列化基础 Java 的序列化(Serialization)和反序列化(Deserialization)是将对象的状态转换为字节流并恢复的过程。这个过程使对象可以保存到文件、通过网络传输或保存到数据库中,并在稍后恢复成对象。 序列化(Serialization):将 Java 对象的状态转换为字节流的过程。这使得对象可以保存到文件、发送到其他 JVM 甚至通过网络传输。 反序列化(Deserialization):将字节流转换回 Java 对象的过程。这允许恢复先前序列化的对象状态。 序列化条件 要使

sky123博客 3908

Java 序列化与反序列化

一文带你了解什么是序列化和反序列化,什么是serialVersionUID,如何实现序列化以及序列化的源码解析。

glb168的博客 1906

Java 序列化和反序列化

可以通过实现 readObject 方法来自定义反序列化过程。例如,可以在反序列化时对字段进行额外的验证或初始化。// 不会被默认序列化// 自定义反序列化逻辑// 默认反序列化// 手动反序列化 age// 自定义序列化逻辑// 默认序列化// 手动序列化 age@Override// 序列化// 反序列化。

qq_33807380的博客 1636

Java反序列化

​ PHP的反序列化和java的反序列化是两种不同的类型,序列化和反序列化本身没有漏洞点,只是为了实现数据的完整高效的传输。​ PHP反序列漏洞是由于类里面的魔术方法调用了某个函数,该危险函数又调用了别的函数,最终执行到了危险函数的位置转存中…(img-6467S4OE-1700661213322)]

m0_46390077的博客 1184

【Java】序列化和反序列化

而这个writeString()往往是这样写的,字符串长度(不是大小)小于两个字节,就先写入一个字节的TC_STRING(16进制 74),然后调用writeUTF(),写入一个signature,这好像跟jvm有关。要使用一个类,就要先把它加载到虚拟机中,在加载完类之后,堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构,这个对象就像一面镜子,透过镜子可以看到类的结构,所以形象的称之为:反射。

double222222的博客 1214

反序列化漏洞3之java序列化与反序列化

定义: 反序列化漏洞是一种在多种编程语言中存在的典型漏洞,特别是在JAVA中。特点: 不同的编程语言具体的利用细节和影响的范围不一样,但概念类似。定义: Vulhub是一个国产的靶场平台,收集了众多中间件漏洞。功能: 支持一键搭建漏洞测试靶场,方便进行漏洞研究和复现。漏洞数量: 目前大概有100多个漏洞,其中反序列化的漏洞就有20多个。使用方式: 通过docker-compose up -d命令启动漏洞环境。课程重点: 本节课将讲解JAVA的反序列化漏洞。

jonhswei的博客 888

Java反序列化漏洞

本文详细介绍了Java中的序列化与反序列化机制,以及相关的安全漏洞。首先,序列化是将对象转换为字节流以便存储或传输,反序列化则是将字节流恢复为对象。Java通过Serializable接口和ObjectOutputStream、ObjectInputStream类实现这一过程。文章还探讨了Java反序列化漏洞,特别是通过构造特定的字节流(Gadget Chains)来触发恶意代码执行。Gadget Chains是由多个可被利用的类或方法组成的调用链,最终执行危险操作。文章以URLDNS链为例,展示了如何通过

mingsec的博客 1256

Java 反序列化漏洞

在各种编程语言的反序列化漏洞中,Java是最引人瞩目的,因为Java的开发生态中各种第三方库组件相互依赖,经常出现开发中常用的基础底层组件出现安全问题时,会引发核弹式反应,进而影响到上层得操作系统。

qq_61553520的博客 5937
上一篇: Ubuntu11.10 安装 apache-storm-1.0.2
下一篇: java判断字符串是否回文
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值