序列化与反序列化
来源:互联网 发布:手机cms 编辑:程序博客网 时间:2024/06/06 20:32
话不多说,直接开工
1.我们有一个User类,实现了Serializable接口
public class User implements Serializable { private static final long serialVersionUID = -1L; public int id; public String name; public String info; public User() { } public User(int id, String name,String info) { this.id = id; this.name = name; this.info = info; }//getset方法省略 @Override public String toString() { return "id="+id+"\nname="+name+"\ninfo="+info; }}
2.开始序列化也就是将user对象写入文件中,直接贴代码
public static void main(String[] args) throws Exception { String path = "D:\\a.txt"; User user = new User(1,"张三123","info"); ObjectOutput out = new ObjectOutputStream(new FileOutputStream(path)); out.writeObject(user); out.close();}
3.反序列化public static void main(String[] args) throws Exception { String path = "D:\\a.txt"; ObjectInputStream in = null; in = new ObjectInputStream(new FileInputStream(path)); User user = (User) in.readObject(); in.close(); System.out.print(user.toString());}
结果:成功读取接着,说说关于serialVersionUID的问题。
为什么要有serialVersionUID,如果没有它又会出现什么问题。
序列化的时候系统会把当前类的serialVersionUID写入序列化文件中(如果没有会默认生成),当反序列化的时候系统会检测文件中的serialVersionUID,看它是否和当前类的serialVersionUID一致,如果一致就说明序列化的类的版本和当前类的版本是相同的,这个时候就可以反序列化成功;
那如果没有这个serialVersionUID,当当前类和序列化的类相比发生了某些变换比如某些成员变量的增加与删除,那么序列化时的默认生成的serialVersionUID就会不一样,从而导致反序列化失败。发生java.io.InvalidClassException异常。
下面我们修改User类
删除serialVersionUID(也就是让其默认生成),然后序列化
接着我们删除其中的一个成员变量,
public class User implements Serializable {// private static final long serialVersionUID = -1L; public int id; public String name; public User() { } public User(int id, String name) { this.id = id; this.name = name; }//getset方法省略
@Override public String toString() { return "id="+id+"\nname="+name; }}
然后开始反序列化,然后我们会发现上面所说的异常,原因是因为默认生成的serialVersionUID不一致。
所以如果一个类永不改变,serialVersionUID确实可有可无,如果确定不了为了保险还是需要设置它的serialVersionUID。避免了日后修改类里的成员变量导致反序列化失败。
还要一点就是如果反序列的化的类的类名发生了改变,那么这必将导致反序列化的失败。
还有...静态成员变量属于类不属于对象,不会参与序列化过程其次用transient关键字标记的成员变量也不会参与序列化过程
- 序列化与反序列
- 序列化与反序列
- XML序列化与反序列化
- 对象序列化与反序列化
- 序列化与反序列化
- 转载:序列化与反序列化
- c#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 序列化与反序列化
- 序列化与反序列化
- C#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 再看序列化与反序列化
- 序列化与反序列化对象
- 序列化与反序列化
- .NET序列化与反序列化
- ReactNative基于CodePush实现热更新集成详解
- 生产环境实战spark (8)分布式集群 Hadoop集群WEBUI打不开问题解决,关闭防火墙firewall
- SSZipArchive导入出错
- eclipse集成weblogic+weblogic安装
- 关于 < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />
- 序列化与反序列化
- 支持向量机SVM算法应用【Python实现】
- Activemq点对点模式
- Html5新标签解释及用法
- 基于 ELK Stack 和 Spark Streaming 的日志处理平台设计与实现
- 要提高SQL查询效率where语句条件的先后次序应如何写
- 大数据-Hadoop学习笔记08
- python修改文件内容
- 学习日记