序列化

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,系统也会默认给一个,所以要显式加上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值