`
y806839048
  • 浏览: 1119085 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

序列号的作用

阅读更多

序列号的作用:serialVersionUID

 

1,网络传输,持久化,

2,反序列话的时候,如果没有版本号原实体类有改动的时候,此时用就的反序列会抛出异常,有了版本标志就不会出异常,新改的会自动赋值默认值

 

 

 

 

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

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

Eclipse中The serializable class XXXXXX  does not declare a static final serialVersionUID field of type long出现这样的警告处理办法。 
当采用程序的Add default Serial version ID修复时,Eclipse会加上:private static final long serialVersionUID = 1L; 
当采用程序的Add generated Serial version ID修复时,Eclipse会加上:private static final long serialVersionUID = xxxxL; 

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

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

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

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

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

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

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

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

  1. 将对象实例相关的类元数据输出。
  2. 递归地输出类的超类描述直到不再有超类。
  3. 类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。
  4. 从上至下递归输出实例的数据
 

 

 

分享到:
评论

相关推荐

    TCP/IP序列号和确认号

    TCP/IP序列号和确认号详解: TCP协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方...

    浪潮全站点序列号

    序列号的作用 序列号在IT行业中扮演着至关重要的角色,主要功能有: - **验证合法性**:确保用户购买的软件或硬件是正版,防止盗版和非法使用。 - **激活产品**:序列号通常用于激活产品,使其从试用模式转变为完整...

    vnc 序列号

    #### 三、VNC序列号的作用 1. **合法性验证**:确保软件使用者拥有正版授权。 2. **功能解锁**:解锁高级特性,如高画质传输、多显示器支持等。 3. **技术支持**:获得官方提供的技术支持和服务。 4. **更新权限**...

    安川MPE720软件序列号

    首先,我们来了解一下安川MPE720软件及其序列号的基本概念、作用以及如何管理和使用这些序列号。 ### 安川MPE720软件简介 安川MPE720是一款专门用于安川电机控制系统的编程与调试软件。该软件广泛应用于工业自动化...

    松下PLC_GR7序列号

    在探讨“松下PLC_GR7序列号”的相关内容时,我们首先需要理解几个核心概念:什么是PLC(可编程逻辑控制器)、松下GR7系列PLC的特点、序列号的作用及其重要性,以及如何管理和维护这些序列号。 ### PLC简介 PLC是一...

    Everest序列号Everest序列号

    为了更好地理解这些信息,我们需要先了解一下Everest软件的基本情况及其序列号的作用。 ### Everest软件简介 Everest是一款非常著名的系统诊断工具,它可以提供详尽的硬件和操作系统信息。这款软件能够帮助用户...

    Source Insight 3.5 序列号

    综上所述,Source Insight 3.5 的序列号对于确保软件合法使用、解锁高级功能以及获取技术支持等方面具有重要作用。用户应当通过官方渠道或其他合法途径获取序列号,避免使用非法渠道获取的序列号,以免造成不必要的...

    lindo与lingo的序列号

    从给定的信息来看,主要涉及的是...序列号作为软件版权保护的重要手段之一,在保证软件开发者权益的同时,也对软件的正常使用起到关键作用。因此,在使用这些软件时,建议用户选择正规渠道获取并遵守相关的版权法规。

    瑞星杀毒软件正版序列号

    根据提供的文件信息,我们可以深入探讨有关“瑞星杀毒软件正版序列号”的一系列知识点,包括序列号的作用、如何获得合法的序列号以及使用正版软件的重要性等。 ### 序列号的作用 序列号(Serial Number)通常指的...

    三菱编程软件序列号

    序列号在软件许可管理中起着至关重要的作用,它是软件制造商为跟踪授权使用情况而分配的一串独特字符。对于三菱编程软件而言,序列号确保了每个用户能够合法地访问和使用其功能,同时帮助制造商控制版权并提供技术...

    金山办公软件WPS序列号

    #### WPS序列号的作用 WPS序列号(或称为激活码)是用于验证WPS办公软件合法使用权的一种代码,通常由字母和数字组合而成。通过输入正确的序列号,用户可以解锁软件的所有高级功能,享受完整版本带来的便利。未激活...

    读取硬盘序列号、CPU序列号、主板序列号

    这些信息在系统维护、设备追踪、软件授权验证等方面都有重要作用。下面将详细讲解如何通过VB(Visual Basic)编程语言来读取这些硬件序列号。 首先,硬盘序列号是每个硬盘独一无二的标识符,由硬盘制造商分配。读取...

    linux下获取硬盘序列号、U盘序列号的C源码

    这些信息在设备管理、故障排查、数据安全等方面都具有重要作用。本文将详细讲解如何通过C语言源码来实现这一功能,以标题中的`GetDiskSerialNum.c`和`GetSerial2.c`为例。 首先,我们需要理解的是,在Linux环境下,...

    Turbo Photo序列号

    为了更好地理解这些序列号的意义以及它们在实际应用中的作用,本篇文章将详细介绍以下内容: ### Turbo Photo 软件简介 Turbo Photo 是一款专业的图像处理软件,广泛应用于照片编辑、修复、格式转换等场景。该软件...

    IVT Bluesoleil 8.0.370.0序列号3

    对于Bluesoleil这类付费软件而言,序列号的作用尤为重要: 1. **合法性验证**:通过序列号验证,可以确保用户使用的软件是正版授权,从而保护了软件开发者的权益。 2. **功能解锁**:对于某些版本的软件来说,没有...

    DW安装序列号.txt

    在探讨“DW安装序列号”这一主题时,我们需要先明确几个关键点:DW指的是什么软件?为什么需要安装序列号?序列号如何使用?...希望本文能帮助您更好地理解序列号的作用及其使用方法,确保您的工作环境安全可靠。

    cx-one4.30序列号

    cx-one4.30作为一款功能强大的工业自动化软件,其序列号在确保软件合法使用方面发挥着重要作用。无论是对于初学者还是经验丰富的工程师来说,了解如何正确获取和使用序列号都是十分必要的。此外,随着技术的不断进步...

    获取硬盘序列号的软件

    它用于区分不同的硬盘设备,对设备管理和售后服务有着重要作用。在Windows操作系统中,通常可以通过多种方式获取硬盘序列号,包括使用命令行工具、系统属性查看或者第三方软件。 对于Windows XP系统,获取硬盘...

    vmware v6.5.3的序列号

    序列号的作用 序列号是激活软件合法使用权的关键凭证。对于VMware vSphere Client 6.5.3而言,拥有有效序列号意味着用户可以享受到官方提供的所有技术支持和服务保障。 #### 2. 如何获取序列号 通常情况下,用户...

    LCDS 3.1 ES2序列号

    综上所述,“LCDS 3.1 ES2序列号”在软件安装、激活、升级等多个环节都起着至关重要的作用。正确管理和使用序列号不仅可以保障软件的正常运行,还能帮助用户充分利用官方提供的各项服务和支持。对于企业和个人开发者...

Global site tag (gtag.js) - Google Analytics