Java中的序列化与反序列化 序列号的问题

不太明白 在序列化时为类添加 serialVersionUID 的意义,是说添加了这个field之后,
在反序列化时检测到 这个值变化了,就会反序列化成 上一个版本的这个类? 否则在没有它的时候类发生变化反序列化时报错的话,添加了它不也是一样的报错?
这个是怎么回事呢?

3个回答

用来检查对象状态是否被修改用的。

序列化/反序列化时用来判断对象状态是否改变

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java的序列化与反序列化、序列号冲突问题解决
/* * 注意: * static 静态不能序列化 * transient 瞬态关键字  属性值不能被系序列化 只能修饰成员变量 * Serializable 标记的作用,可以序列化  不具备任何的功能 cloneable * ↓ * 实现 序列号 * 编译一次序列号就改变一次 * 新编译后的class文件中的序列号 ,与原来文件pe...
Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 什么叫序列化和反序列化 为啥要实现这个 Serializable 接口,也就是为啥要序列化 serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,是有这么些问题的。 1,序列
内部类序列化出错
内部类序列化出错  java对象传输很多需要先将对象序列化,当对内部类进行序列化的时候,程序运行会报异常:不能将没有实现序列化接口的Object序列化。  怎么回事,这是一个很简单的内部类,的确已经实现了序列化接口了,其定义的成员都是可序列化的String类型;将其换成普通类没有问题。难道不能使用序列化的内部类?  其实我们使用的内部类是嵌套类(nested class)的一种,而nested cl
Java对象的serialVersionUID在序列化和反序列化的用途
本博客主要转自如下链接 http://blog.csdn.net/javazejian/article/details/52665164 这篇文章写的不错,但是有些地方我估计博主没有亲自测试,所以有些地方我亲测后发现其实他说的不对,大家可以先看看他写的,然后再看看我下面说的具体哪里不对了 先说说serialVersionUID的用途: 其实一个类要实现序列化和反序列化,不声明seria
序列化和反序列化漏洞的简单理解
1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些大名鼎鼎的Java应用,实现远程代码执行。 然而事实上,博客作者并不是漏洞发现者。博客中提到,早在2015年的1月28号,Gabriel
java 对象序列化和对象反序列化操作时的版本兼容性问题
结合书和网上一些资料,现总结如下: serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式: 一个是默认的1L,比如: private static final long serialVersionUID = 1L;(自己指定也可以) 一个是根据类名、接口名、成员方法及属性等来生成一个64
Java对象的序列化(Serialization)和反序列化详解
1.序列化和反序列化 序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以是字节或者XML等格式;而字节或者XML格式的可以还原成完全相等的对象,这个相反的过程又称为反序列化; 2.Java对象的序列化和反序列化 在Java中,我们可以通过多种方式来创建对象,并且只要对象...
Java的序列化和反序列化,我所遇到的坑
有时需要为对象做持久化,就是把内存里的对象保存到磁盘(暂且叫做磁盘吧,可以等同于sp、db、文件、网络等)上,等以后需要这个对象的时候再从磁盘上还原到内存,因此需要序列化和反序列化。 坑1、类里面一定要serialVersionUID,否则旧数据会反序列化会失败。 serialVersionUID是根据该类名、方法名等数据生产的一个整数,用来验证版本是否一致。 如果不加这个字段,
JAVA序列化和反序列化XML
package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import
java 序列化追加文件及反序列化读取多个对象
先来看看java的ObjectOutputStream和ObjectInputStream源码好了public ObjectOutputStream(OutputStream out) throws IOException { verifySubclass(); bout = new BlockDataOutputStream(out); ...
序列化和反序列化时的注意点
如果一个对象不止一次写入对象流,并不会存储对象的多个副本。第一次写入一个对象时,就会为它创建一个序列号。Java虚拟机将对象的所有内容和序列号一起写入对象流。如果再写入相同对象(注意:这里的相同指的是相同的引用(地址),具有相同的引用则表示是相同的对象或者可以说是同一个对象),就只存储序列号。如果中途更改了对象的属性,那么该对象的内容是不会存储在流中的,只存储序列号。所以当需要从流中读出第二次写入
Java对象的XML序列化和反序列化 - (1)
XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据。如果能在Java对象和XML文档之间建立某种映射,例如Java对象的XML序列化和反序列化,那么就可以使Java的对象方便地与其他应用进行交换。 java.beans包里面有两个类XMLEncoder和Decoder,分别用于将符合JabaBeans规范的Java对象以XML方式序列化和反序列化。以下代码显示了如何使用这两个类
object 序列化,反序列化(Instant日期处理,集合对象反序列化处理)共通类
public class JsonUtil { private JsonUtil(){} private static ObjectMapper objectMapper; static { objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new Jav...
google protobuf入门(序列化和反序列化)
ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf。 下面介绍的是使用Java ProtoBuf的基本步骤: 1.http://code.google.com/p/protobuf/downloads/list ,选择其中的win版本下载 2.下载一个prot
Java对象序列化与反序列化
Java对象转换为字节序列的过程称为序列化,用途是对象永久保存、传输。序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值。
Java中Json字符串的序列化与反序列化
.
Dubbo序列化问题排查
h1. 现象 为一个dubbbo接口新增了一个方法:{code} DomainObject testSer(); 实现: @Override public DomainObject testSer() { DomainObject result = new DomainObject(); result.setAge(10); resul
java 的序列化和反序列化的概念及简单使用
何为序列化
关于序列化后反序列化丢失几大问题总结
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 反序列化失败原因:(目前只遇到过两种) 没有添加 serialVersionUID 可能会导致反序列化失败 生成默认的serialVersionUID --> [Ad
Java Serialization/序列化/反序列化 及 transient Java关键字详解
以前只知道序列化和反序列化的意思及怎么去使用,没有更深入的去了解,在学习之中遇到了这个transient关键字,以前并不知道在Java中 还有 transient 关键字,既然遇到了就花点时间把整理一下,查阅了一些资料看了一下,自己整理一份让方便更多的人去学习。 首先,Java提供了一个机制,称为一个对象可以被表示为字节序列,包括该对象的数据以及关于该对象的类型,并存储在对象数据
spring-data-redis中的序列化/反序列化
集群环境下JdkSerializationRedisSerializer反序列化实例失败
秒懂Java序列化与反序列化
版权申明】非商业目的可自由转载 博文地址: 出自:shusheng007 概述 什么是序列化?什么是反序列化?为什么需要序列化?如何序列化?应该注意什么?本文将从这几方面来论述。 定义 什么是序列化?什么是反序列化? 序列化: 把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。 作用 为什么需要序列化? 在...
java序列化和反序列化得几种方式
一.Java序列化的作用 有的时候我们想要把一个Java对象变成字节流的形式传出去,有的时候我们想要从一个字节流中恢复一个Java对象。例如,有的时候我们想要 把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象写成转换成字节流。对于这种通用 的操作,我们为什么不使用统一的格式呢?没错,这里就出现了java的序列化的概念。在Ja
什么是序列化和反序列化
详见原博客用来处理对象流简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!问题的引出:如上所述,读写对象会有什么问题呢?比如:我要将对象写入一个磁盘
序列化的一些注意事项及建议
本文来自《改善java的151个建议》 建议11:养成良好习惯,显示声明UID 我们先写一个序列化与反序列化的工具类SerilizationUtils public class SerializationUtils { private static String FILE_NAME="E:/serializable.txt"; public static
java序列化反序列化uid
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。      当实现java.io.Serializable接口的实体(类
Java序列化与反序列化总结
文章原文出处:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化     Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求
Java序列化与反序列化
Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化
java序列化与反序列化系列问题
很多商业项目用到数据库、内存映射文件和普通文件来完成项目中的序列化处理的需求,但是这些方法很少会依靠于Java序列化。本文也不是用来解释序列化的,而是一起来看看面试中有关序列化的问题,这些问题你很有可能不了解。“Java序列化指的是将对象转换程字节格式并将对象状态保存在文件中,通常是.ser扩展名的文件。然后可以通过.ser文件重新创建Java对象,这个过程为返序列化” Java序列化的API中
Java序列化(Serializable)与反序列化
感谢有奉献精神的人 转自:http://www.importnew.com/19036.html?ref=myread 序列化是干什么的 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象
Java对象以Blob存储,及序列化反序列化 (3)
在完成之前2篇文章内容之后,我们讨论下以下情况。 项目要改版,TUser或者User要修改属性,添加或者删除某些字段,那么数据库已保存的数据还能被反序列化为原有对象,并进行扩展么? 修改User.java package cn.vicky.po.vo; import java.io.Serializable; /** * * @author Vicky.H */ p
JAVA与c#的序列化和反序列化
case) 已经写好了java的序列化对象存在于redis中,希望用c#来读取和修改。 尝试后发现c#和java的序列化反序列化是不一样的,并且没有现成可用的方案。 可用的solution 1)java/c# 都序列化为json或xml这种通用模型,这样2者可用交互没有问题。     但对于我这个case因为java已经写好了,所以不太好改。 2)IKVM.net方案,这是一个
c# vs2012 序列化(Serialize)和反序列化(Deserialize)实际应用
c# vs2012 序列化(Serialize)和反序列化(Deserialize)实际应用c#中序列化和反序列化又称之为串行化,能够使运行的中的数据结构及数据能够长时间保存起来,用以后面的使用。
【Java】——Json反序列化为Java对象
【项目需求】    最近做项目的时候,功能是将一个表单和一个datagrid中的集合中的数据一起传到后台去,也就是将接送。 【思路】   1、在之前做过的功能中,我们用过@requestMap来接收传过来的list对象集合,所以我也想用这种方法去接收。于是将我的jsonStr拼接到url中。将form表单对象值放到data中。尝试之后,发现无法接收,因为传递过来的是一个字符串。  
Java 对象序列化和反序列化
之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列化机制就可以很好的解决这种操作。本篇就简单的介绍Java对象序列化,主要内容如下: 简洁的代码实现 序列化实现的基本算法 两种特殊的情
Java Serializable序列号和反序列化
当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,可以 把该字节序列保存起来(例如:保存在一个文件里),以后可以随时将该字节序列恢复为原来的对象。甚至可以将该字节序列放到其他计算机上或者通过网络传输到其他计算机上恢复,只要该计 算机平台存在相应的类就可以正常恢复为原
java序列化与反序列化 代码示例
1.序列化的对象 /**  * 需要序列化的对象 实体类 需要继承Serializable  *   * @author lm 说明:1.序列化不会保存静态变量,因为静态变量是对象的状态 2.Transient 不会被序列化 因为Transient 是临时变量  *   */ public class Model implements Serializable { private
二叉树4:二叉树的序列化和反序列化
二叉树4:二叉树的序列化和反序列化
java json 序列化与反序列化
J组件:com.fasterxml.jackson POM(局部): [html] view plain copy 1.0.13   2.3.1             ch.qos.logback       logback-classic       ${logback.version}     
xstream ---java序列化到xml,xml反序列化到java对象(一)
一、简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象、Json数据的转换。它不需要schema或其他的mapping文件就可以进行java对象和xml文件之间的转换,API调用起来非常方便,并且扩展功能强大。
在C#中,Json的序列化和反序列化的几种方式
摘自:http://www.cnblogs.com/caofangsheng/p/5687994.html 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象。 什么是JSON? JSON (JavaScript Object Notation) is a lightweight data-interchange for
Newtonsoft.Json 序列化和反序列化
1. 使用方法 (1)下载Newtonsoft.net ----》 (2)在项目中引用Newtonsoft.Json.dll---》 (3)添加命名空间 using Newtonsoft.Json 2.语法 序列化: JsonConvert.SerializeObject(object value) 反序列化 JsonConvert.DeserializeObject(st
java中的序列化(Serializable)和反序列化
JAVA序列化与反序列化就是JAVA对象与一串字节流之间的相互转换, 我们在程序中创建的JAVA对象只存在于JVM中, 当程序退出时, 这些对象也就消失了, 而序列化正是为了将这些对象保存起来以仅将来使用, 也可以将已经序列化的对象传送给其他JVM来使用, 这些序列化的字节流是于JVM无关的, 也就是说一个JVM序列化的对象可以在另一个JVM中反序列化. 使用JAVA提供的序列化机制
java 解析php序列化数据问题
有很多情况会涉及到php和java进行数据交换。一般情况是通过json数据格式去交换。但是对于那种比如:商城采用php进行开发,管理系统使用java语言开发,这其中就会涉及到数据交互,而正好php进行过数据序列化存储到数据库,而java还必须去解析,所以就会有这篇文章。开始我也上网查找过相关的工具类去进行解析,比如说我看到的一篇相关文章解决办法(在最后附录上)。下面介绍我我的方法如下: 1.这是
Java反序列化时报异常java.io.EOFException
问题第一种解决办法 在写完对象后,加一句 oos.writeObject(null); 插入null是用来判断是否读取到结尾。oos是ObjectOutputStream实例。 然后读对象的时候,使用while ((obj = ois.readObject()) != null),来判断再次读取一个对象,判定对象是否是空,如果不为null继续读取,如果为null停止读取。 oos.
Gson的序列化和反序列化
序列化和反序列化Java序列化是指把Java对象转换为可传输的字节序列的过程;而Java反序列化是指把传输的字节序列恢复为Java对象的过程。这两个过程使我们非常方便的存储和传输数据。Gson概述Gson是一个Java库,可用于将Java对象转换为JSON表示,它也可以用来将JSON字符串转换为等效的Java对象。
【Protocol Buffer】Protobuf的序列化和反序列化
前言 目前主流的几种数据交互的格式主要有xml、json、protobuf等等。一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。xml数据格式在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的方式,不仅压缩了一定的数据空间,同时也具有可读性。protobuf是后起之秀
C++序列化与反序列化的简单探索
C++序列化与反序列化 初步的探索~
Java 序列化ID的作用
序列化ID的作用:          其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序
Thrift序列化与反序列化的实现机制分析
Thrift是如何实现序死化与反序列化的,在IDL文件中,更改IDL文件中的变量序号或者[使用默认序号的情况下,新增变量时,将新增的变量不放在IDL文件的结尾,均会导致Thrift文件的反序列后无法做到向后兼容],我们只有理解Thrift是如何实现序列化的,才能了解这种现象产生的原因,才能把代码写的更让人放心 关于Thrift域的版本号的定义可以在http://thrift.apache.o
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问