java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用

原标题:Java入门教程-序列化版本号serialVersionUID的作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象。序列化是Java中实现持久化存储的一种方法;为数据传输提供了线路级对象表示法。

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

Eclipse中TheserializableclassXXXXXXdoesnotdeclareastaticfinalserialVersionUIDfieldoftypelong出现这样的警告处理办法。

当采用程序的AdddefaultSerialversionID修复时,Eclipse会加上:privatestaticfinallongserialVersionUID=1L;

当采用程序的AddgeneratedSerialversionID修复时,Eclipse会加上:privatestaticfinallongserialVersionUID=xxxxL;

其实这个问题出现的具体原因是和序列化中的这个serialVersionUID有关。serialVersionUID用来表明类的不同版本间的兼容性。有两种生成方式:一个是默认的1L;另一种是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。在JDK中,可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID的值,对于Test.class,执行命令:

serialverTest这时JVM(java虚拟机)会生成一个哈希字段。

对比一下这个哈希字段的值与方法2中生成的字段值是一样的,可见,在CMD中使用serialver指令就是根据类名、接口名、成员方法及属性等来生成哈希字段的。

java类中为什么需要重载serialVersionUID属性。

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。把Java对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为Java对象的过程称为对象的反序列化。

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

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

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

java.io.ObjectOutputStream代表对象输出流,它的writeObject(Objectobj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。只有实现了Serializable或Externalizable接口的类的对象才能被序列化。Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式。凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:privatestaticfinallongserialVersionUID;类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的serialVersionUID。显式地定义serialVersionUID有两种用途:

1)在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。

2)当你序列化了一个类实例后,希望更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出一个异常。如果你添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值(对象为null,基本类型为相应的初始默认值),字段被删除将不设置。

序列化算法一般会按步骤:

将对象实例相关的类元数据输出。

递归地输出类的超类描述直到不再有超类。

类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。

从上至下递归输出实例的数据返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

男人可以有多敷衍?

1 现在更流行「红茶女生」?(via.白头叔)▼2 谢谢,有被冒犯到(素材来源网络,侵删)▼3 天使与恶魔▼4 男朋友可以多敷衍?▼5 你的高原红,像极了妈妈的巴掌印&#xff…

linux 内核代码构架图

转载于:https://www.cnblogs.com/kuainiao/archive/2012/12/17/2822384.html

Win11开始大范围推送!

微软宣布 Windows11 现已开始向更多符合最低硬件要求的电脑推送。预计到 2022 年年中,所有符合条件的电脑都可以免费升级到 Windows 11。微软将根据硬件条件、可靠性、使用时间,及其它会影响升级后使用体验的因素,为 Windows 10 电脑分阶段推…

puppet安装

一. 服务器端和客户端都需要做的操作。 1. 下载软件 wget http://puppetlabs.com/downloads/facter/facter-1.6.4.tar.gz wget http://downloads.puppetlabs.com/puppet/puppet-2.7.9.tar.gz 2. 安装ruby puppet是ruby开发的,所以需要安装。 Yum …

HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)

工厂设计相关软件: Intergraph产品: Intergraph Intools Engineering Suite v5.2-ISO 1CD(国际顶级仪表工程的设计软件) Intergraph SmartPlant Enterprise 2007-ISO 2DVD Intergraph SmartPlant 3D 2009-ISO 1DVD Intergraph SmartPlant 3D v6.1 WinXP-ISO 1DVD I…

状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely

题目传送门 题意:有n*m的房间,.表示可以被点亮,#表示不能被点亮,每点亮一个房间会使旁边的房间也点亮,有意盏特别的灯可以选择周围不同方向的房间点亮。问最少需要多少灯使得所有房间点亮 分析:需要被点亮的…

有什么看起来很难,但是其实很简单的题目

全世界只有3.14 % 的人关注了爆炸吧知识做题其实很简单今天超模君一进办公室就感觉充满“杀气”,果不其然,一抬头就看见小天拿着一张纸对着我坏笑。莫非这家伙又要我折纸?拿过纸张一看,虽然密密麻麻的一大堆公式,但我相…

iphone-common-codes-ccteam源代码 CCTestMacros.m

// // CCTestMacros.m // CCFC // // Created by xichen on 11-12-30. // Copyright 2011 ccteam. All rights reserved. // #import "CCTestMacros.h" implementation CCTestMacros end 可能有更新: googlecode链接地址:http://code.googl…

双11,2分钟狂挣20亿的神秘大厂,急招.NET!

双11小米开门红,2分钟不到突破20亿,于是机智的我又去逛了下小米的招聘官网:招5年左右.NET,35k左右,14薪,要求WPF和自动化,真香!回首牛年2个跳槽季,招WPF的大厂太多了&…

炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......

全世界只有3.14 % 的人关注了爆炸吧知识就在刚刚,万众瞩目的2020年诺贝尔奖物理学奖获得者确定了!他们就是——天体物理学家(该领域连续两年获得诺奖)物理学奖得主罗格彭罗斯爵士(Roger penrose)&#xff0…

Perl深拷贝

使用mkdir可以创建一个目录,但只能创建一个目录。 使用mkpath则可以创建连续的子目录。在linux下使用cp -p同样可以实现同样的功能。 再使用File::Copy来拷贝。 1 use File::Path; 2 use File::Copy;3 sub writeSubFolder4 {5 my $root E:/perl_work/; 6 …

硬盘维护方法介绍

硬盘维护方法介绍 1、保持电脑工作环境清洁 硬盘以带有超精过滤纸的呼吸孔与外界相通,它可以在普通无净化装置的室内环境中使用,若在灰尘严重的环境下,会被吸附到PCBA的表面、主轴电机的内部以及堵塞呼吸过滤器,因此必须防尘。 还…

Envoy实现.NET架构的网关(五)集成Redis实现限流

.NET网关与Gateway实战-Envoy与kong课程什么是限流限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。而E…

php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程

文章是重点是讲php中的分页原理,同时我们是利用一个实现来讲解如何在php中实现分页,这个就是基于自己写的留方板程序了,有需要的朋友可以参考一下,很适合于初学者哦。分页的关键问题其实在于Mysql的一个关键字limite这个关键字后边…

使用 Daynamic 动态添加属性

所谓的Dynamic 动态类型&#xff0c;页面也要是动态的&#xff08;强撸&#xff09; 很简单的 直接上代码&#xff1a; //案例一 DynamicpersonCollection new ObservableCollection(); for (var i 0; i < 10; i) { dynamic p new ExpandoObject(); ((IDictionary<str…

豆瓣9分+纪录片,每一部都美到窒息......

全世界只有3.14 % 的人关注了爆炸吧知识自然类的纪录片一直是BBC的金字招牌&#xff0c;制作精良的纪录片&#xff0c;不仅能让孩子享受视觉的艺术&#xff0c;还能通过独特的视角去解读大自然&#xff0c;真正激发出孩子探索世界的热情。也适合大人影迷们在看了N部电影后视觉疲…

Android中常用到的权限

android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问"properties"表在checkin数据库中&#xff0c;改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置 android.permission.ACCESS_FINE_LOC…

英语中十二个月份的由来

最近在学习英文&#xff0c; 先从月份开始喽~~把整理来的12个月份分享一下(*^__^*) 一月January在罗马传说中&#xff0c;有一位名叫雅努斯的守护神&#xff0c;生有先后两副脸&#xff0c;一副回顾过去&#xff0c;一副眺望未来。人们认为选择他的名字作为除旧迎新的第一个月月…

java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)

[求助]基础-怎样编一个计算算术平均数的程序(急啊)刚刚开始学习JAVA,不好意思明天就要交作业了,还是编不出高手帮忙吧题目:编写一个计算随意多少个数的算术平均数的程序首先要有一个对话框,可以输入你要计算的数字如果输入的是0,则马上计算结果,0不算在内例如:输入的是1,-2,0.则…

程序怎么跑着 就卡死,句柄泄漏,内存泄漏了

一&#xff1a;背景 1. 讲故事上个月中旬&#xff0c;星球里的一位朋友在微信找我&#xff0c;说他的程序跑着跑着内存会不断的缓慢增长并无法释放&#xff0c;寻求如何解决 &#xff1f;得&#xff0c;看样子星球还得好好弄&#xff01;&#xff01;&#xff01;&#x1f602;…