serialVersionUID的功能是什么呢?
在一些日常开发中,我们经常看见别人的实体类中有serialVersionUID变量
那么这个serialVersionUID变量到底起什么作用呢?
下文笔者将一一道来,如下所示
例:
那么这个serialVersionUID变量到底起什么作用呢?
下文笔者将一一道来,如下所示
serialVersionUID的功能
serialVersionUID是Serializable类中用于定义版本的控件 serialVersionUID的功能: 用于表示当前实体对象可使用此类进行序列化和反序列化 两个相同的serialVersionUID值的信息,反序列化为同一个类不会出现问题 如果两个不同的serialVersionUID值,反序列化为同一个类时,则会产生一些异常信息 注意事项: 如果我们没有定义serialVersionUID值时 JVM会根据自己的算法生成一个默认的serialVersionUID值 可能会由于JVM不同,生成的serialVersionUID值不同,所以笔者建议实体类定义时 最好加上serialVersionUID值
何时修改serialVersionUID的值
当实体类中出现新的不兼容的新Java类型时,此时我们应该修改serialVersionUID的值
IDE如何生成serialVersionUID值
打开Preferences–>Editor–>Inspections 然后在右侧输入UID进行搜索(搜索方式比较快 也可在java–>Serialization issues里找) 然后勾选Serializable class without 'serialVersionUID'后面的复选框 右侧Severity默认Warning即可

例:
package com.java265.reflect; import org.junit.Test; import java.io.*; /** * 深入理解serialVersionUID */ public class SerializableTest { @Test public void testWrite() { Address address = new Address(); address.setStreet("猫猫第一大道"); try { FileOutputStream fout = new FileOutputStream("address.ser"); ObjectOutputStream oos = new ObjectOutputStream(fout); oos.writeObject(address); oos.close(); System.out.println("Done"); } catch (Exception ex) { ex.printStackTrace(); } } @Test public void testRead() { Address address; try { FileInputStream fin = new FileInputStream("address.ser"); ObjectInputStream ois = new ObjectInputStream(fin); address = (Address) ois.readObject(); ois.close(); System.out.println(address); // 街道: 猫猫第一大道 } catch (Exception ex) { ex.printStackTrace(); } } public static class Address implements Serializable { private static final long serialVersionUID = 1L; String street; public String getStreet() { return this.street; } public void setStreet(String street) { this.street = street; } @Override public String toString() { return new StringBuffer(" 街道 : ") .append(this.street) .toString(); } } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。