什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?

支付宝面试:什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决? 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 什么叫序列化和反序列化 作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这个问题之前,你要先知道一个问题,这个比较重要。这个Serializable接口,以及相关的东西,全部都在 Java io 阅读详情

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?】

标题:

修真院java小课堂】什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?

开场语:

大家好,我是IT修真院西安分院第3期的学员乔名震,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java任务八,深度思考中的知识点——什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?

(1)背景介绍:

1.1 序列化

任务六中,当我们向Redis或Memcache中插入对象时,对象需要先序列化才能存入MemCache或redis中。

当两个进程远程通信时,它们可以向彼此发送各种类型的数据,包括文本、图像、音频、视频等,这些数据通过网络以二进制序列传输。当两个Java进程通信时,一个进程可以将一个Java对象发送给另一个吗?

1)发送方需要将Java对象转换成一个字节序列,才能在网上传送

2)接收方需要将字节序列恢复到Java对象。

(2)知识剖析:

2.1 什么是序列化

序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进制串的过程。

Java序列化是指把Java对象转换为字节序列的过程

2.2 什么是反序列化?

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

Java反序列化是指把字节序列恢复为Java对象的过程

2.3序列化有什么作用?

对象的序列化主要有两种用途:

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2) 在网络上传送对象的字节序列。

对象序列化的本质是将对象的状态通过有序字节流进行保存或传输,由此,静态变量是类变量,属于整个类,并非专属于每个对象实例,因此,不序列化静态变量。

2.4在RMI中是否要实现 Serializable 接口?

需要

首先,在跑Demo的时候,通过rmi传输对象时,不去实现Serializable接口,会抛异常;

其次,rmi远程方法调用最底层是通过socket通信来实现对象的传输,其数据的传输最后都归结于二进制的数据包。

2.5serialVersionUID是什么?

serialVersionUID用于序列化与反序列化过程中的类信息校验值。

2.6serialVersionUID的用处是什么?

serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。

(3)常见问题:

java中的序列化

(4)解决方案:

java中的序列化:

需要做序列化的对象的类,必须实现序列化接口:Java.lang.Serializable 接口(这是一个标志接口,没有任何抽象方法),Java 中大多数类都实现了该接口,比如:String,Integer

底层会判断,如果当前对象是 Serializable 的实例,才允许做序列化,Java对象 instanceof Serializable 来判断。

(5)编码实战:

一个User类,它的对象需要序列化:

User类去实现Serializable接口:

ObjectOutputStream采用默认的序列化方式,对User类的对象的非transient的实例变量进行序列化。

ObjectInputStream采用默认的非transient的实例变量进行反序列化。

Java.IO.ObjectOutputStream:通过 writeObject()方法做序列化操作

ObjectOutputStream:表示输出流对象

它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中

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

ObjectInputStream,代表对象输入流,

它的readObject()方法从一个源输入流中读取字节,再把它们反序列化成一个对象,并将其返回。

(6)拓展思考:

6.1 transient

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

(7)参考文献:

优快云

百度百科

(8)更多讨论:

1、serialVersionUID实际作用

假设本地数据库中存储了大量的user对象,后来由于需求,要修改User类中的属性;如果不设置SerialVersionUID,根据属性方法等自动生成,就会出现代码演示中的错误,造成的结果就是已经存储的user对象无法反序列化;所以设置serialVersionUID的作用是为了向下的兼容性。

2、除了Serializable接口,还有没有实现序列化的方式

实现Externalizable接口,它是Serializable接口的子类

被Serializable接口声明的类的对象的内容都将被序列化,如果现在用户希望自己指定序列化的内容,则可以让一个类实现Externalizable接口

3、rmi中实现序列化的操作在哪里

实体类实现了Serializable接口,rmi对序列化过程进行封装,其中ObjectOutputStream采用默认的序列化方式,对实体类的实例化对象序列化

【接地系统篇】电力系统接地技术详解:从基本原理到实际应用 接地是为电流返回电源提供的一条低阻抗通道。简单来说,就是为故障电流修建一条"安全回家"的路,防止电流通过人体或其他不应带电的部件。接地系统选择原则安全性优先:TN-S系统安全性最高,适合重要场所经济性考虑:TN-C系统成本最低,适合一般工业连续性要求:IT系统供电连续性最好,适合特殊场所灵活性选择:TN-C-S系统兼顾经济与安全,应用最广。 阅读详情

相关推荐

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2678

JAVA序列化之RMI远程调用

RMI(Remote Method Invocation)是Java中的远程过程调用(Remote Procedure Call,RPC)实现,是一种分布式Java应用的实现方式。它的目的在于对开发人员屏蔽横跨不同JVM和网络连接等细节,使得分布在不同JVM上的对象像是存在于一个统一的JVM中一样,可以很方便的互相通讯。通讯就涉及到了数据的编码和解码,对于一般的数据类型我们不需要这么做,但是涉及到比

开心的专栏 5418

【向量数据库】Milvus向量数据库 ① 从入门到实战

Milvus是专为海量高维向量设计的开源数据库,支持AI搜索、图像识别、推荐系统等场景。相比传统关系型数据库(如PostgreSQL),它更高效处理语义检索、非结构化数据存储,可毫秒级响应亿级向量查询。单机场景下,推荐配置8GB内存/32GB硬盘,支持FAISS/HNSW等索引算法,支持GPU加速。本文涵盖优快云专属部署教程(CentOS脚本/配置调优),提供避坑指南与扩展资源,并对比分析与传统数据库差异。适合算法工程师、AI开发人员快速上手,附官方下载与性能测试技巧,手把手教你搭建高效向量检索系统!

xiezhiyi007的专栏 1585

JDK RMI探索与使用--序列化

在RMI通信模型中有两个重要问题,一是远程对象的发现的问题,二是数据的传递问题。在java程序中,数据类型包括基本数据类型和引用数据类型,而RMI通信主要是引用类型的使用和传递。 引用类型的传递方式,对于在同一JVM中的传递时,因为参数的引用和程序同属于一个内存,传递起来没有问题,但是不同JVM,一个jvmA对象引用使用另外一个jvmB中的class文件进行实例化,不大可能,RMI是将对象在jvmB中实例化,并将对象发布到注册中心,当jvmA客户端调用的远程对象复制到本地时,通过注册中心找到远程对象在jv

qq_27215113的博客 331

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 329

关于Java RMI 中对象的序列化与反序列化

关于Java RMI 中对象的序列化与反序列化。背景介绍:在RMI分布式应用系统中,服务器与客户机之间传递的Java对象必须是可序列化的对象。不可序列化的对象不能在对象流中进行传递。对象序列化扩展了核心 Java输入/输出类,同时也支持对象。对象序列化支持把对象编码以及将通过它们可访问到的对象编码变成字节流;同时,它也支持流中对象图形的互补重构造。序列化用于轻型持久性和借助于套接字

随风奔跑的专栏 7352

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2294

java反序列化-RMI

RMI(Remote Method Invocation),远程方法调用。跟RPC差不多,是java独立实现的一种机制。实际上就是在一个java虚拟机上调用另一个java虚拟机的对象上的方法。RMI依赖的通信协议为JRMP(Java Remote Message Protocol ,Java 远程消息交换协议),该协议为Java定制,要求服务端与客户端都为Java编写。这个协议就像HTTP协议一样,规定了客户端和服务端通信要满足的规范。(我们可以再之后数据包中看到该协议特征)。

weixin_40151476的博客 1261

【ODX介绍】-4.2-UDS诊断$27服务在ODX-D诊断描述文件中如何描述

共25页精讲:附ODX-D XML:UDS $27 Security服务0x61和0x62 Sub-Function,其它Sub-Function可参照其格式。 目录 1 ODX-D描述一个UDS $27 Security服务Sub-Function的结构 2 标签DIAG-SERVICE描述的内容 2.1 举例:DIAG-SERVICE的XML描述 3 标签REQUEST描述的内容 3.1 举例:REQUEST的XML描述 4 标签POS-RESPONSE描述的内容 4.1 举例:PO..

「汽车电子助手」的博客 1121

数据资产可视化分析:PowerBI在大数据管理中的实战

目的:帮你搞懂“为什么数据资产需要可视化?”“PowerBI能帮企业解决什么问题?”,并掌握用PowerBI做大数据可视化的实战技巧。范围:覆盖数据资产定义、可视化分析原理、PowerBI核心功能(数据连接、建模、可视化)、零售企业实战案例,以及未来趋势与挑战。背景:为什么企业的数据像乱堆的玩具?核心概念:数据资产、可视化分析、PowerBI分别是什么?它们怎么配合?实战步骤:用PowerBI帮零售企业整理“销售玩具箱”,做出能指导决策的仪表盘;应用场景:不同部门怎么用这个“整理好的玩具箱”?

2501_92132293的博客 906

Java RMI反序列化总结篇-01

放一张seebug的图, 所以客户端要访问远程对象就由服务端首先把远程对象注册到注册表,然后客户端先访问注册表拿到远程对象的stub以后,此时就可以像访问本地一样调用远程对象方法,底层由stub再接受客户端的参数和方法,然后就是stub作为代理再帮客户端请求服务端,把参数和方法都发送到服务端,服务端接收到参数和方法后,在服务端进行执行,再把返回结果给客户端的stub,stub再给客户端,所以客户端实际上看不到底层的通信逻辑,这种架构设计已经屏蔽了底层通信。

wfz2333的博客 1476

泛微OA提交流程到下一个节点

泛微OA后端接口强制流程归档

CXYCMY的博客 2245

【修真院java小课堂】什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?

大家好,我是IT修真院西安分院第三期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务八,深度思考中的知识点——什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么? 1.背景介绍 1.1 序列化 ...

QiaoXM的博客 380

IDEA的使用指南

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java rmi反序列化靶场_什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?...

这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能,本篇分享的是:【什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?】标题:修真院java小课堂】什么是序列化和反序列化,在RMI中是否要实现 SERIALIZA...

weixin_42149153的博客 205

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java序列化与反序列化全讲解

1 概述 序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。 为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图..

mocas_wang的博客 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这...

riemann_的博客 3万+

序列化、反序列化

因为:Java对象的构造必须先有父对象,才有子对象,反序列化也不例外,所以反序列化时,为了构造父对象,只能调用父类的无参构造函数作为默认的父对象。)是一种将对象以一连串的字节描述的过程,将程序中的对象,放入硬盘(文件)中保存就是序列化,如果不存放在磁盘中,而是一直存放在内存中,会增大内存的消耗;一些敏感的字段,如用户名密码(用户登录时需要对密码进行传输),我们希望对其进行加密,这时,就可以采用本节介绍的方法在客户端对密码进行加密,服务器端进行解密,确保数据传输的安全性。

qq_37432174的博客 8916

java 实体类是否必须实现序列化接口?

目录 1. 序言 2. 序列化的目的? 2.1 场景: 3. java实现Serializable接口 4.serialVersionUID 4.1private static final long serialVersionUID = 1L; 的意义 5. 为什么保存到数据库或者文件中要序列化? 1. 序言 实体类是没必须实现序列化接口的,实现的话可以用于通信之类的。 ...

新一的技术笔记 1万+

为何要implements Serializable,反序列化是什么?

文章目录问题解释序列化是什么?UID不指定会怎样?这个serialVersionUID的值在存数据库的时候,存哪里了?序列化类的内部成员变量有要求吗?序列化的类的内部静态变量也会被序列化吗?反序列化有要求吗? 问题 使用对象,当内存中的对象写入到硬盘的时候,当用套接字在网络上传送对象的时候,当通过RMI传输对象的时候 (调用一个远程对象的方法(通过JNDI服务获取计算机目标对象的引用,将对象从B传送到A,需要实现序列化接口。)) 为了保证数据传输的可靠 性,常常要implements Serializabl

lidashent的博客 2328

Java序列化和反序列化

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这个问题之前,你要先知道一个问题,这个比较重要。 这个Serializable接口,以及相关的东西,全部都在 J

技术小站 2752

为什么序列化要实现Serializable接口

通过Serializable接口和ObjectOutputStream/ObjectInputStream类,Java标准库提供了一种方便的方式来实现对象的序列化和反序列化,使得对象可以在不同的环境中进行传输、存储和恢复。实现了Java中的Serializable接口的类会被称为可序列化的,这意味着它们的实例可以被序列化为字节流,以便于在网络上传输、保存到文件中或者在内存中进行持久化存储。需要注意的是,JVM本身并不执行序列化的具体逻辑,而是依赖于Java标准库中提供的序列化机制来完成序列化操作。

tzdiyouda的博客 847

JavaBean 实现 implements Serializable 序列化

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。 什么情况下需要序列化: 1.当你想把的内存中的对象写入到硬盘的时...

m0_37163942的博客 1482

Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这...

路漫漫其修远兮 9万+

Java 之 接口 Serializable 序列化与反序列化

1、什么是序列化与反序列化? 序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 2、是么时候需要序列化和反序列化 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在网络上传送对象的时候; 当你想通过RMI传输对象的时候; 3、实现接口 Serializable 注意点 静态 static 修饰的变量不序列化 在实现这个Serializable 接口的时候,一定要设置 serialVersionUID

qq_36511997的博客 706

Java面试知识点(八)序列化和反序列化

我们都知道一个对象只要实现了 Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利, 我们可以不必关系具体序列化的过程,只要这个类实现了 Serilizable 接口,这个类的所有属性和方法都会自动序列化。 这个类的有些属性需要序列化,而其他属性不需要被序列化; 对象的序列化: 目的:将一个具体的对象进行持久化,写入到硬盘上。 (注意:静态数据不能被序...

程序员世杰 2860
上一篇: 图片上传
下一篇: JDBC连接池原理
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值