java.io.Serializable 序列化问题

Person.java

package a.b.c;

public class Person implements java.io.Serializable{

//    private static final long serialVersionUID = 2481632967198330813L;

    String field1;
String field2;
String field3;
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
} }

Student.java   Student继承自Person,但为了清晰表示,按Person一模一样又覆盖了一遍

package a.b.c;

public class Student  extends Person implements java.io.Serializable {

//    private static final long serialVersionUID = 2481632967198330813L;

    String field1;
String field2;
String field3;
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
} }

SerializableWriter.java

package a.b.c;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; public class SerializableWriter { public static void main(String[] args) throws Exception{
write();
} public static void write() throws Exception{
Student stu= new Student();
stu.setField1("aaa111");
stu.setField2("bbb222");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C:/Users/King/Desktop/jx.txt"));
objectOutputStream.writeObject(stu);
objectOutputStream.flush();
objectOutputStream.close();
} }

SerializableReader.java

package a.b.c;

import java.io.FileInputStream;
import java.io.ObjectInputStream; public class SerializableReader { public static void main(String[] args) throws Exception{
read();
} public static void read() throws Exception{
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("C:/Users/King/Desktop/jx.txt"));
Object obj=objectInputStream.readObject();
Person person=(Person)obj;
System.out.println(person.getField1());
System.out.println(person.getField2());
objectInputStream.close();
} }

打印结果

aaa111
bbb222

总结

  • 只要版本号一致,且Student就算删掉field3的属性和方法,仍旧可以把序列化后的Student反序列化成Student.
  • 只要版本号一致,且Student  继承自父类 Person,那么就可以把序列化后的Student反序列化成Person.

自己项目经历:

esb_new.jar包中的head多加了一个password属性(这个场景是说添加属性的那个包就是新包)

然后生产上 核心 通过http连接 ESB(esb_old.jar) 去调用 电销(esb_new.jar)回调接口 ,报序列号版本不一致问题, 因为电销提供的回调接口是Spring Invoke远程方法调用,需要依赖请求对象RequestBusinessObjVo,在转对象时会用到序列化头部信息,此时旧包(esb_old.jar)丢了新包(esb_new.jar)需要的属性,所以旧包不能调新包.

但是电销(esb_new.jar)通过http连接 ESB(esb_old.jar)去调代理平台(esb_old.jar) 没报错. 是因为 电销 和ESB是http通信的,而ESB和代理平台此时通过Spring Invoke远程方法调用,仍旧用的是esb_old.jar包所以没有报序列号问号.

java.io.Serializable 序列化问题的更多相关文章

  1. java.io.Serializable 序列化问题【原】

    java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...

  2. java.io.Serializable 序列化接口

    什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...

  3. Java Io 对象序列化和反序列化

    Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1.      对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2.      序列化流ObjectOut ...

  4. java.io.Serializable浅析

    转自:http://www.cnblogs.com/gw811/archive/2012/10/10/2718331.html Java API中java.io.Serializable接口源码: p ...

  5. cause: java.lang.IllegalStateException: Serialized class com.taotao.pojo.TbItem must implement java.io.Serializable

    HTTP Status 500 - Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: ...

  6. Java IO流-序列化流和反序列化流

    2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者 ...

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

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seria ...

  8. JDK1.8 java.io.Serializable接口详解

    java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...

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

    原文地址:https://blog.csdn.net/qq_27093465/article/details/78544505 遇到这个 Java Serializable 序列化这个接口,我们可能会 ...

随机推荐

  1. 《C与指针》第四章练习

    本章问题 1.Is the following statement legal?If so,what does it do? (下面的语句是否合法,如果合法,它做了什么) 3 * x * x - 4 ...

  2. Django 的开始之路

    django源码安装 检查是否安装成功 1.在命令行进入Django环境 在新建完项目后 进入带有manage.py的目录,执行以下文件. python manage.py  shell 2.Djan ...

  3. selenium加载时间过长

    为了获取网站js渲染后的html,需要利用selenium加载网站,但是会出现加载时间过长的现象,因此可以限制其加载时间以及强制关掉加载: # !/usr/bin/python3.4 # -*- co ...

  4. jquery选择器之属性选择器

    [attribute]   匹配指定属性名的所有元素 [attribute=value] 匹配给定的属性名是某个特定值的属性 [attribute!=value] 匹配给定的属性名不是某个特定值的属性 ...

  5. yii2安装

    https://github.com/settings/tokens  设置token 在安装的时候 要复制进去 复制到安装命令中去

  6. 使用-MM生成include指令和依赖生成(make include directive and dependency generation with -MM)

    I want a build rule to be triggered by an include directive if the target of the include is out of d ...

  7. mysql数据库优化小结

    一.常见数据库的优化操作 1.表的设计要符合三范式. 2.添加适当的索引,索引对查询速度影响很大,必须添加索引.主键索引,唯一索引,普通索引,全文索引 3.添加适当存储过程,触发器,事务等. 4.读写 ...

  8. Blackfin DSP(八):BF533的DMA

    #include <cdefBF533.h> #include <sys\exception.h> #define POLC 0x00004000 #define PORT_C ...

  9. restfull api

    REST 表示状态传输.这是一个体系结构样式,可用于设计网络服务,可以被各种客户端消耗.核心思想是,不使用如CORBA,RPC或SOAP复杂的机制在机器之间进行连接,简单的 HTTP 用于使它们之间调 ...

  10. 14. Reverse Linked List II

    Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...