private static final long serialVersionUID = 1L

2023-05-16

很显然这行代码的意思是将SerialVersionUID的值定义为一个常量,那这是干什么的呢?

解决这个问题,首先要了解包含SerialVersionUID的Serializable接口是什么?

Serializable:一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。

实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。

下一个问题,什么是序列化?

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。

最后一步,为什么要定义这个serialVersionUID呢?

serialVersionUID叫做流标识符,即类的版本定义,作用是在序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。jvm在反序列化的时候先去对比这个版本名字,如果数据流中的serialVersionUID和类中的serialVersionUID相同,才会进行反序列化,而不同的话就会抛出异常。一般来说,如果你对一个实现了serializable接口的类进行修改之后,需要修改这个版本信息。serialVersionUID可以显示声明也可以隐式声明。隐式声明是通过包名,类名等多个因素计算出来的,而显示声明就是通过赋值自己设置。

如果你不写private static final long serialVersionUID = 1L,在对这个类进行修改时,若你忘记修改serialVersionUID,版本上就会出现不兼容的问题,于是就会出现反序列化报错的情况

如果你显示定义了private static final long serialVersionUID = 1L,在对这个类进行修改时,若你忘记修改serialVersionUID,这个类也能被进行反序列化,它就会自动向上兼容版本,不会报错。
 

参考文章:
        

        原文链接:https://blog.csdn.net/dancheguiji/article/details/80578020

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

private static final long serialVersionUID = 1L 的相关文章

  • 跳进C语言的一个块

    如果我像这个例子一样跳进一个块 跳过 声明 include
  • Java:返回类(不是实例)

    是否可以在静态方法中返回一个类 我会解释 I have public class A public static void blah public class B 我想在 B 中创建一个静态方法返回A 所以你可以这样做 A blah And
  • 在 .Net 中使用私有集初始化属性

    public class Foo public string Name get private set lt Because set is private void Main var bar new Foo Name baz lt This
  • 子类需要访问抽象超类的私有属性

    我有一个抽象 java 类 它实现了它的几个方法 但没有实现其他方法 在它实现的方法中 它使用私有属性变量 使用的变量也需要在子类中使用 据我所知 我的选择是 在子类和超类中都声明私有变量 将抽象类中当前实现的方法的实现推迟到子类中 还有其
  • Java中私有静态变量有什么用?

    如果一个变量被声明为public static varName 然后我可以从任何地方访问它ClassName varName 我还知道静态成员由类的所有实例共享 并且不会在每个实例中重新分配 将变量声明为private static var
  • 匿名命名空间:它们真的那么好吗?

    我一直在使用static关键字时间较长 用于定义内部链接 后来 我改用 C 风格 将本地事物包装在匿名命名空间中 然而 现在当我使用匿名命名空间多年后 我开始认为static关键字更容易使用 一个常见的问题是我有这样的模式 namespac
  • 静态方法与非静态方法

    下面是静态方法和非静态方法的php类代码示例 示例1 class A None Static method function foo if isset this echo this is defined echo get class thi
  • c 函数原型不匹配仅仅是一个警告吗

    请看下面我的代码 include
  • 静态局部变量和静态全局变量有什么区别?

    C 入门 说 每个局部静态变量在第一次之前都会被初始化 执行通过对象的定义 本地静态数据是 函数结束时不会被销毁 当程序运行时它们被销毁 终止 局部静态变量与全局静态变量有什么不同吗 除了申报地点不同之外 还有什么不同呢 void foo
  • 如何对 android 进行编程以查找特定网络?

    我的应用程序仅在校园网络上才能访问校园数据 当在公共 wifi 或 3g 网络上运行应用程序时 应用程序将挂起然后强制关闭 我如何对我的应用程序进行编程以检查该专用网络 wifi或检查android当前使用的连接 如果不等于 校园wifi
  • 在groovy中将变量标记为final是否有意义?

    我想知道变量如何标记为final由 Groovy 解释 在 1 8 0 1 8 1 中 我知道这在 Java 中是有意义的 并且可以提高性能 当然还有助于避免愚蠢的错误 我想了解如果final可以帮助java编译器优化用Groovy编写的程
  • 什么是 PHP 中的呼叫转移和静态呼叫或后期静态绑定? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我从网站上获得了一个代码示例 但我很难理解输出 我正在分享代码 class A public static function foo
  • 尝试在类中定义静态常量变量

    我正在定义一个变量adc cmd 9 as a static const unsigned char在我的课堂上ADC私人之下 由于它是一个常量 我想我只需在它自己的类中定义它 但这显然不起作用 pragma once class ADC
  • 如何在 JavaScript 中通过方括号访问私有字段

    这段代码的工作原理 class Test field get field return this field 但如果我想计算字段名称我必须使用方括号 但它不起作用 class Test field get field return this
  • 适当使用静态方法

    从概念上讲 当方法仅接受输入并将输入重新格式化为输出时 使用静态方法 C 是否合适 例如 public static string FormatString string inputString return some formatting
  • 静态/动态类型与静态/动态绑定

    大家这4个术语有什么区别 能举个例子吗 Static and dynamic是指解决某些编程元素的时间点的行话 Static表示解析是在程序构建时发生的 Dynamic表示解析是在程序运行时发生的 静态和动态打字 Typing指由于数据值之
  • 将实现拆分到多个文件/模块,并尽可能保持所有内容的私密性

    考虑我的库中的以下代码 pub struct Foo impl Foo fn helper self pub fn do something foo Foo foo helper 我的图书馆的用户应该能够使用Foo and do somet
  • 使用反射获取静态类列表

    很多问题都很接近 但没有一个能回答我的问题 如何使用 C 3 5 中的反射从程序集中获取所有静态类 我已经定义了所有类型 但没有 IsStatic 属性 计算 0 个构造函数确实很慢 而且也不起作用 有什么提示或一行代码吗 Chris 以下
  • 强制动态链接库中静态变量的预初始化

    C 11 标准第 3 6 2 条 第 4 条规定 具有静态存储持续时间的非局部变量的动态初始化是否在 main 的第一个语句之前完成是由实现定义的 C 标准将静态初始化与动态初始化区分开来 静态初始化仅需要计算编译时常量 我相信急切静态初始
  • PHP 静态变量用双引号引起来

    如何让 PHP 计算双引号中的静态变量 我想做这样的事情 log self CLASS METHOD entering 我尝试过各种 组合来获取变量值self CLASS 但没有任何效果 我目前已经解决了字符串连接问题 但输入起来很痛苦 l

随机推荐

  • ubuntu16.04修改复制粘贴快捷键的方法

    Ubuntu虚拟机在terminal使用CTRL 43 C CTRL 43 V xff0c 复制 xff0c 粘贴的办法 xff1a 选择 xff1a Terminal gt Preference gt Shortcut 把你要修改的复制
  • 虚拟机ubuntu16.04的备份与恢复方法

    本文目的在于记录在命令行的模式下进行linux系统的备份与还原 xff0c 虽然系统的备份方法有很多种 xff0c 但本文只记录最简单粗暴的一种 首先成为root用户 xff1a sudo su 然后进入文件系统的根目录 当然 xff0c
  • VSCode C++代码提示和补全

    网上都说安装完扩展C C 43 43 Extension就可以了 xff0c 但我这儿不行 xff0c 发现是因为需要自己另外提供头文件 xff0c 于是利用了mingw的头文件 1 解压i686 4 9 3 release posix d
  • vs 写c++一个类的头文件放在改工程下的一个子目录里,include出错

    工程名test 类名http 子目录 xff1a http 在主源文件中include这个http 的头文件时 xff0c include 34 http http h 34 编译出错 一定要改成绝对路径 include 34 home m
  • STM32 FreeRTOS堆、栈以及系统堆栈

    stm32以及freertos 堆栈解析 https blog csdn net sinat 36568888 article details 124320985 1 当freertos采用heap 4内存分配方案时 xff0c stm32
  • 在linux下如何编译c/c++代码(库)

    目录 在linux下如何编译c c 43 43 代码 库 1 运行环境 1 学知资料 2 Linux下静态库和动态库的区别 2 基本文件类型 2 c c 43 43 程序编译使用基本流程 2 gcc和g 43 43 区别 3 gcc基本使用
  • Ubuntu系统用火狐浏览器无法上网问题的解决方法

    刚做的Ubuntu系统用火狐浏览器无法上网问题的解决方法 首先打开终端 xff0c 输入 xff1a sudo apt get update 等待出现完成字样 其次再输入 xff1a sudo apt get install firefox
  • Raspberry Pi2/3引脚介绍

    引脚图 Raspberry Pi2 3引脚如下图所示 xff1a Raspberry Pi 3 的硬件接口通过开发板上的 40 排针 J8 公开 功能包括 xff1a 17x GPIO 引脚1x SPI 总线1x I2C 总线2x 5V 电
  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • 互斥锁、读写锁 、 自旋锁和RCU锁

    基础知识思考整理 http blog csdn net aganlengzi article details 50996227 互斥锁 mutex xff1a 在访问共享资源之前对进行加锁操作 xff0c 在访问完成之后进行解锁操作 加锁后
  • Dashgo D1概述

    概述 Dashgo D1是深圳EAI科技专门针对ROS开发的移动平台 xff0c 自主研发的核心结构保证了载重大 动力足 续航长和扩展性强的性能 xff0c 深受创客 科研 企业的欢迎 主要特性 xff1a 易于使用 由整机及其附件组成 x
  • 搭建Dashgo运行环境

    安装 设置用户的串口读取权限 span class hljs built in sudo span usermod span class hljs operator a span G dialout your user name your
  • 超声波避障

    运行如下脚本 roslaunch dashgo bringup bringup smoother ob span class hljs preprocessor launch span 在另一个终端运行 rostopic span clas
  • 虚拟机VirtualBox安装Ubuntu14.04

    本教程的运行环境 xff1a Windows 7 虚拟机 VirtualBox xff0c Ubuntu 14 04 1 准备 下载 VirtualBox5 0版可以使用后面提供的OVA镜像直接导入 xff0c 镜像是ROS的集合环境 xf
  • 树莓派实现自主导航

    使用 Flash Lidar F4 激光雷达进行自主导航 树莓派的IP假设为192 168 11 100 该教程基于地图已经建好并保存的情况下 teb amcl demo launch 的 args 参数要与前面 gmapping demo
  • 键盘控制移动

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为eaibot 默认密码为 eaibot 1 不带陀螺仪的底盘驱动 打开一个终端 xff0c 运行以下命令 xff0c 启动底盘驱动 带平滑加减
  • Dashgo-D1 不带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导
  • Dashgo-D1 带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导航模块并启动
  • Dashgo-D1 多点连续导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot 地图已经建好并引用的情况下 第一种方式 打开一个终端 xff0c ssh登录导航模块 x
  • private static final long serialVersionUID = 1L

    很显然这行代码的意思是将SerialVersionUID的值定义为一个常量 xff0c 那这是干什么的呢 xff1f 解决这个问题 xff0c 首先要了解包含SerialVersionUID的Serializable接口是什么 xff1f