一、基础篇--1.1Java基础-什么是java的序列化和反序列化

【Java代码审计】反序列化漏洞篇 发送方必须将要发送的 Java 对象序列化为字节流,接收方则需要将字节流再反序列化,还原得到 Java 对象,才能实现正常通信。当攻击者输入精心构造的字节流被反序列化为恶意对象时,就会造成一系列的安全问题。在 Java 原生的API 中,序列化的过程由类的方法实现,反序列化过程由类的方法实现。将字节流还原成对象的过程都可以称作反序列化,例如,JSON 串或 XML 串还原成对象的过程也是反序列化的过程。同理,将对象转化成 JSON 串或 XML 串的过程也是序列化的过程。 阅读详情

一、基础篇--1.1Java基础-什么是java的序列化和反序列化

 什么是序列化和反序列化

序列化:把堆内存中的java对象数据,通过某种方式把对象存储到磁盘文件或者传递给其他网络节点。这个过程称为序列化。简单来说呢,就是将对象转换成二进流的过程。

反序列化:把磁盘文件或网络节点上的对象数据恢复成java模型的过程,也就是将序列化过程中产生的二进制串转化为数据结构或者对象的过程。

为什么要序列化

1.在分布式系统或者需要远程调用,此时就需要把对象在网络上传输,需要把对象转为二进制形式,需要共享的JavaBean对象,都需要做序列化。

2.服务器钝化:如果服务器发现某些对象好久没活动了,那么服务器就会把这些内存中的对象持久化在本地磁盘文件中(Java对象转换为二进制文件);如果服务器发现某些对象需要活动时,先去内存中寻找,找不到再去磁盘文件中反序列化我们的对象数据,恢复成 Java 对象。这样能节省服务器内存。

 java怎么进行序列化

1.需要序列化的类都要实现Java.lang.Serializable接口(这是一个标志接口,没有任何抽象方法),没有实现序列化接口,在序列化过程中会抛出不支持序列化的异常。

2.在java中使用对象流来完成序列化和反序列化:

ObjectOutputStream:通过 writeObject()方法做序列化操。

ObjectInputStream:通过 readObject() 方法做反序列化操作。

 第一步:创建JavaBean对象
public class User implements Serializable{
    private String name;
    private Integer age;
    transient private String sex;
    ***** 省略get、set方法******
    public User(String name,Integer age){
        this.name = name;
        this.age = age;
    }
}
 第二步:使用ObjectOutputStream对象实现序列化
OutputStream op = new FileOutputStream("io"+File.separator+"a.txt");
ObjectOutputStream ops = new ObjectOutputStream(op);
ops.writeObject(new User("test",1));
ops.close;
 第三步:使用ObjectInputStream 对象实现反序列化
InputStream in = new FileInputStream("io"+File.separator+"a.txt");
ObjectInputStream os = new ObjectInputStream(in);
User user = (User) os.readObject();
os.close();
问题:
  • 如果某些数据不需要做序列化,比如上面的性别?

    • 在字段面前加上 transient,反序列化得到的属性值为默认值
  • 序列化版本问题,在完成序列化操作后,由于项目的升级或修改,可能我们会对序列化对象进行修改,比如增加某个字段,那么我们在进行反序列化就会报错

    • 在 JavaBean 对象中增加一个 serialVersionUID 字段,用来固定这个版本,无论我们怎么修改,版本都是一致的,就能进行反序列化了
    private static final long serialVersionUID = 8656128222714547171L;

https://www.cnblogs.com/ysocean/p/6870069.html

posted @ 2019-01-22 15:53 ForeverYoungCoder 阅读( ...) 评论( ...) 编辑 收藏
CTFShow萌新区全攻略:从密码破解到Web渗透的实战解析 本文为CTFShow萌新区新手提供从密码破解到Web渗透的完整实战攻略。文章深入解析了密码学、隐写术、杂项和Web安全四大核心方向,分享了实用的解题工具、思维方法和绕过技巧,旨在帮助初学者建立系统的安全竞赛解题体系,而不仅仅是提供一份题解(WP)。 阅读详情

相关推荐

《哥谭神话-工程篇》01.Palantir 平台架构解析-混乱数据如何转化唯一真相源?

Palantir 平台的架构哲学可以概括为将洞察落地为行动,其核心是将“获取唯一真相”能力深度嵌入现有的、复杂的工作流程中,成为提升运营效率和决策质量的倍增器。

897

201711671101 《Java程序设计》第十章学习总结

教材学习内容总结 主要内容:File类  文件字节输入、输出流  文件字符输入、输出流  缓冲流  随机流  数组流  数据流  对象流  序列化与对象克隆  使用Scanner解析文件  文件锁 java.io包(I/O流库)提供大量的流类。 输入流的指向称为它的源,程序通过输入流读取源中的数据。所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子...

Yokada的博客 438

大疆OcuSync vs 传统2.4GHz:深度拆解无人机图传射频模块的硬件差异

本文深度对比了大疆OcuSync与传统2.4GHz无人机图传射频模块的硬件差异,涵盖芯片组、天线系统、PCB设计、散热方案及生产测试等核心环节。重点解析OcuSync的全定制SoC芯片、智能MIMO天线阵列及精密PCB布局如何实现革命性性能提升,为无人机图传技术发展提供专业参考。

u5v6w7的博客 806

loan deal/loan facility

loandeal: bank give a loan to borrower LOANDEALID VERSION LDRDEALID LDRVERSION DEALSNPCUSIP DEALTYPE DEALNAME DEALDESC DEALSTATUS CRAGREEMENTDATE CRAGREEMENTCLSDATE CRAGREEMENTEF

走马观花 1275

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6736

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 721

java 序列化基础_一、基础篇--1.1Java基础-什么是java的序列化和反序列化

什么是序列化和反序列化序列化:把堆内存中的java对象数据,通过某种方式把对象存储到磁盘文件或者传递给其他网络节点。这个过程称为序列化。简单来说呢,就是将对象转换成二进流的过程。反序列化:把磁盘文件或网络节点上的对象数据恢复成java模型的过程,也就是将序列化过程中产生的二进制串转化为数据结构或者对象的过程。为什么要序列化1.在分布式系统或者需要远程调用,此时就需要把对象在网络上传输,需要把对象转...

weixin_39630771的博客 97

Logisim实战:手把手教你设计硬布线版MIPS CPU(多周期/8指令/附电路图)

本文是一份详细的Logisim实战指南,手把手教你设计一个采用硬布线控制的多周期MIPS CPU。文章深入剖析了硬布线控制与微程序控制的核心理念差异,并逐步讲解了从定义执行状态、构建状态跳转逻辑到生成控制信号、集成测试的完整流程,最终实现一个支持8条指令、可运行简单程序的处理器模型。

g9h0i1的博客 592

Java 中序列化与反序列化,看这篇就够了!

一、 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象,放入文件中保存就是序列化,将文件中的字节码重新转成对象就是反序列化。 二、 序列化和反序列化的必要性 当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。 而java是面向对象的开发方式,一切都是java对象,想要实现java对象的

m0_58559010的博客 2万+

MCGS 和 200SMART 时间同步

在实际应用中,PLC经常会因为断电原因,导致时间不准确。假设我们设置了一个投加泵,每天8-18点投加。屏幕上显示的时间和PLC内部的时间,很可能不一样。所以需要在触摸屏上读取PLC的时间,并且提供设置功能。

mmxxoo_xxmmp的博客 1520

芒果YOLOv7改进04:Loss篇:原创改进损失函数Repulsion:独家首发最新改进Repulsion Loss解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv7原创改进Repulsion|首发最新改进为解决密集人群检测中遮挡设计的损失函数

包括YOLOv5、YOLOv7、YOLOv8等模型改进 3251

java序列化和反序列化基础学习

(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

dayouzi的博客 1412

提取游戏音频文件.bnk

bnk其实是一种对音频的加密方式,一个.bnk文件中通常包含了多个语音文件,一般可以使用Wwise-Unpacker来解码.bnk格式文件该工具命名没有规律,需要手动整理文件名。市面上很多的游戏都把音频文件打成.bnk文件(比如永劫无间),用这种方式可以将你想要的游戏的音频都提取出来,本文内容仅供自己娱乐。

类人_猿的博客 8748

【Java基础】序列化、反序列化和不可变类

不可变类 是指在创建后其状态(对象的字段)无法被修改的类。一旦对系被创建,它的所有属性都不能被修改。也就是说,对象的所有成员变量在初始化后就不能被修改,无论是通过外部方法还是内部方法。这种类的实例整个生命周期内保持不变。

明志の博客 1616

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Java 基础篇】Java序列化与反序列化详解

本文详细介绍了Java序列化和反序列化的原理、使用方法和常见应用场景。通过实现接口,可以实现对象的序列化和反序列化。序列化和反序列化是一种重要的机制,可以实现对象的持久化存储、网络传输和缓存等功能。希望本文对你理解和应用Java序列化与反序列化有所帮助!

繁依Fanyi的博客 7373

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Java】序列化和反序列化

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

double222222的博客 1211

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java 序列化和反序列化

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

qq_33807380的博客 1634

Java 反序列化

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

sky123博客 3904

Java 基础之序列化和反序列化

如 JDK 内置的序列化框架、Fastjson、Hessian、Kryo 等,在序列化后的字节大小、序列化 / 反序列化耗时等方面表现不同。Java 序列化和反序列化是软件开发中的重要概念,在数据存储、网络通信和远程调用等场景中发挥着关键作用。总之,Java 序列化和反序列化在现代软件开发中发挥着至关重要的作用,它们使得数据的存储和传输变得简单和高效。总之,Java 序列化和反序列化在现代软件开发中不可或缺,但在使用过程中需注意各种问题,以确保程序的安全、稳定和高效运行。关键字等措施防御漏洞。

qq_25699299的博客 1324

JAVA反序列化漏洞基础原理

JAVA反序列化漏洞基础原理 1.1 什么是序列化和反序列化? Java序列化是指把Java对象转换为字节序列的过程; Java反序列化是指把字节序列恢复为Java对象的过程; 1.2 为什么要序列化 对象不只是存储在内存中,它还需要在传输网络中进行传输,并且保存起来之后下次再加载出来,这时候就需要序列化技术。 Java的序列化技术就是把对象转换成一串由二进制字节组成的数组,然后将这二进制数据...

洋洋的小黑屋 1755

Java序列化和反序列化详解

Java序列化和反序列化是Java编程中重要的一个部分,在需要进行对象的跨进程、跨网络传输等场景中,会带来很大的便利。然而,在使用过程中,需要注意版本兼容性、性能影响以及安全问题,并对可能的安全漏洞进行防范。通过理解和正确使用Java的序列化机制,我们可以更有效地存储和传输对象状态。

zhzjn的博客 1467

java序列化和反序列化详解

如果默认的序列化机制不符合需求,可以通过实现和方法来自定义序列化和反序列化的行为。Java序列化是一个复杂但强大的机制,允许开发者轻松地持久化和传输对象。虽然它对于简单的用途来说可能显得有些重,但它提供了一种标准方式来处理对象的深复制,以及对象状态的保存和恢复。正确使用Java序列化需要对其工作原理有深入的理解,尤其是在涉及版本控制和自定义序列化行为时。

2401_83707780的博客 2954

Java反序列化(一)——基础知识

Java程序在运行钱需要先编译成.class文件,这个文件的内容被称为字节码,然后调用加载字节码,每一个类都会在方法区保存一份它的元数据,在堆中创建一个与之对应的Class对象。类的生命周期,经历7个阶段,分别是加载、验证、准备、解析、初始化、使用、卸载。除了使用和卸载两个过程,前面的5个阶段加载、验证、准备、解析、初始化的执行过程就是类的加载过程。验证、准备、解析合成为连接过程。

Xzy03210321的博客 1162

Java反序列化基础

Java反序列化基础知识

weixin_44770698的博客 1040

Java反序列化和PHP反序列化的区别

反序列化存在的意义是为了数据传输,类是无法直接进行传输的。通过序列化后转换为字符串格式或者JSON格式进行传输。

来日可期的博客 2355
上一篇: 一、基础篇--1.1Java基础-hashCode和equals方法的区别和联系
下一篇: 一、基础篇--1.1Java基础-Object类中常见的方法,为什么wait notify会放在Object里边...
口德尔
博客等级 码龄14年 3粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值