java.io.Serializable 序列化问题【原】
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 序列化问题【原】的更多相关文章
- java.io.Serializable 序列化问题
java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...
- java.io.Serializable 序列化接口
什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...
- java.io.Serializable浅析
转自:http://www.cnblogs.com/gw811/archive/2012/10/10/2718331.html Java API中java.io.Serializable接口源码: p ...
- Java Io 对象序列化和反序列化
Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1. 对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2. 序列化流ObjectOut ...
- 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: ...
- Java IO流-序列化流和反序列化流
2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者 ...
- Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seria ...
- JDK1.8 java.io.Serializable接口详解
java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...
- [转]Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
原文地址:https://blog.csdn.net/qq_27093465/article/details/78544505 遇到这个 Java Serializable 序列化这个接口,我们可能会 ...
随机推荐
- Machine Learning Based Proactive Flow Entry Deletion for OpenFlow
来源:IEEE 2018 作者:Hemin Yang and George F.Riley 摘要: 流表容量有限,因此高效管理流表至关重要.本文重点讨论了OpenFlow中定义的一种流表管理机制,即能 ...
- CentOS(6.8)7 安装 Mysql 5.7
https://blog.csdn.net/zyw_java/article/details/70949596 https://blog.csdn.net/yzl11/article/details/ ...
- Oracle 数据表误删恢复 Flashback
1. 前提条件. recyclebin 参数打开. 验证参数是否打开: SHOW PARAMETER RECYCLEBIN 2. 如果参数没有打开的话 需要打开,并且重启一下数据库方法为 alter ...
- SQLSERVER 导出表数据为insert 语句
1. 打开sqlserver的查询分析器,在图示的位置右键以及处理 选择生成对象 重要的是 选择 脚本编写选项 很快就能完成 4 转出的SQL文件就为 5. 但是记得 曾经出过问题, 字符集 还有 ...
- pycharm5.0 快捷键大全osx
官网链接https://resources.jetbrains.com/assets/products/pycharm/PyCharm_ReferenceCard_mac.pdf 一直想给别人安利py ...
- codeforces472B
Design Tutorial: Learn from Life CodeForces - 472B One way to create a task is to learn from life. Y ...
- Leetcode 66.加一 By Python
思路 如果单独操作最后一个元素,令其加一,满十进一,会挺麻烦的,要分情况. 所以我的思路是将list还原到字符串,再变成数值,直接+1,然后再还原到list.详见代码 代码 class Solutio ...
- Java创建文件
public class FileTest { public static void main(String[] args) throws IOException { File file = new ...
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- Azure登陆的两种常见方式(user 和 service principal登陆)
通过Powershell 登陆Azure(Azure MoonCake为例)一般常见的有两种方式 1. 用户交互式登陆 前提条件:有一个AAD account 此种登陆方式会弹出一个登陆框,让你输入一 ...