serialversionuid怎么生成?
在IDEA里面默认并没有直接生成。
在idea工具栏中点击"File"按钮,在弹出的菜单中选择“Settings”选项。弹出Settings弹框后,在搜索栏中输入关键词"serial"并找到“Inspections”选项。
在右侧列表中选择“Serialization issues”并勾选该条目的所有选项,勾选完成后并点击“Ok”按钮。
选中类名称,按Alt+Enter快捷键。下拉弹框中找到“Add ‘serialVersionUID’ field”选项并点击该选项。
序列化:
@Test
public void writePerson()throws Exception{
Person person = new Person();
person.setId("1");
person.setName("星之守瞳映");
person.setSex(false);
person.setScore(98);
ObjectOutputStream outputStream =
new ObjectOutputStream(new FileOutputStream(new File("haha")));
outputStream.writeObject(person);
System.out.println("序列化成功");
outputStream.close();
}
@Test
public void readPerson() throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream =
new ObjectInputStream((new FileInputStream(new File("haha"))));
Person person = (Person)objectInputStream.readObject();
System.out.println("反序列化成功");
System.out.println(person.toString());
}
强烈建议用户自定义一个serialVersionUID,因为默认的serialVersinUID对于类的细节非常敏感
3.用户自定义serialVersionUID的好处
如果我们在反序列化之前把类中的内容做了修改,不如多加了一个属性,反序列化时就会报异常,因为类中的内容变了之后
默认生成的serialVersionUID和之前的不一样了。
如果是用户自定义的serialVersionUID,即使你改变了类中的内容,只有serialVersionUID不变,发序列化一样能成功。
------(不过我测试发现其实用默认的也不会有问题啊,不知道究竟怎样)----------------
明白了,指的是不加serialVersionUID,系统也会默认给一个,所以要显式加上