Serializable:java默认序列化的功能,必须实现Serializable接口
实现Serializable 接口的类,虚拟机会默认添加一个ServialVersionUID 属性
1、SerialVersionUID默认值的计算:根据类的各个方面得来的(属性,方法等)
2、如果显示的声明此属性,虚拟机不会再添加
3、SerialVersionUID 如果不一致,反序列化会失败 (java.io.InvalidClassException)
最佳实践:一定要指定默认的SerialVersionUID 值,避免虚拟机添加!
举例:
public static class User implements Serializable{ private long id; private String username; private String password; public User(){} public User(String username,String password){ this.username = username; //this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
这个User对象,没有默认的serialVersionUID 属性,反序列化的时候,如果新增了字段,就会反序列化失败!
如果改为如下则可以避免这个问题:
public static class User implements Serializable{ /** * */ private static final long serialVersionUID = 1811626210491983990L; private long id; private String username; private String password; public User(){} public User(String username,String password){ this.username = username; //this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
相关推荐
序列化 serializable demo ! 序列化 serializable demo !
說明如何將Serializable物件轉成stream
Serializable的增删改查操作,已经经过验证,可以直接运行。
Java_Serializable(序列化) 的理解和总结
java->serializable深入了解 java->serializable深入了解 java->serializable深入了解
java.io.Serializable序列化问题
Laravel开发-serializable-values Luminark可序列化值包。
java 序列化 对象 Serializable 写着玩的Demo 简单 实用
Android序列化——Serializable与Parcelable
Intent传递数据是android开发中最长用的数据传递方式,可是要传递对象不怎么常用,这里介绍第一种传递对象的方法Serializable传递
bundle传递基本数据,Parcelable类型数据,Serializable类型数据
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
[Serializable]在C_中的作用-NET_中的对象序列化,希望有所帮助
详细讲解了C#中关于对象序列化的知识,包括基本序列化、选择序列化、自定义序列化;对于了解在C#中如何进行对象的序列化有价值
序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一...
Android中的Serializable
C#例子代码 A0101_SerializableC#例子...A0101_SerializableC#例子代码 A0101_SerializableC#例子代码 A0101_SerializableC#例子代码 A0101_SerializableC#例子代码 A0101_SerializableC#例子代码 A0101_Serializable
java 的序列化与反序列化举例测试
NULL 博文链接:https://tony-lee-s.iteye.com/blog/1416044
主要介绍了Java对象Serializable接口实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下