首页 > 其他分享 >Serializable接口 和 serialVersionUID 的关系

Serializable接口 和 serialVersionUID 的关系

时间:2023-04-03 22:03:53浏览次数:36  
标签:goods String 接口 public 序列化 Serializable serialVersionUID name

  1. 结论建议实现了Serializable 手动生成 serialVersionUID

  2. 一般认为实现了Serializable 接口,不手动生成serialVersionUID不会出问题。

  3. 如果没有手动生成,序列化和反序列化的时候,通过类所有字段算一个serialVersionUID出来,但是据说不同jvm可能算的不一样。

  4. 实现了Serializable,但是不手动生成serialVersionUID, eclipse 默认会警告 ,idea默认不会警告

  5. 对象反序列化的时候

    • serialVersionUID相等,字段不相等,不能反序列化
    • serialVersionUID不相等,字段相等,不能反序列化
    • serialVersionUID不相等,字段不相等,不能反序列化
    • 只有serialVersionUID相等,并且字段完全相等才能序列化
  6. 如果帮你需要不改动字段,并且让前后版本java序列化不兼容,可以修改serialVersionUID

  7. 如果你修改了字段,但是你忘了修改serialVersionUID,也是无所谓的事。

  8. 测试代码

    
        /**
         * 测试序列化
         * @throws IOException
         */
        @Test
        public void writeObject() throws IOException {
            File file = new File("C:\\Users\\ZHANGYUKUN\\Desktop\\java.data");
            FileOutputStream fileInputStream = new FileOutputStream(file);
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileInputStream);
    
    
            Goods goods = Goods.randomGoods();
            objectOutputStream.writeObject( goods );
            System.out.println( JSONUtil.toJsonStr( goods ) );
        }
        /**
         * 读取序列化
         * @throws IOException
         * @throws ClassNotFoundException
         */
        @Test
        public void read() throws IOException, ClassNotFoundException {
            File file = new File("C:\\Users\\ZHANGYUKUN\\Desktop\\java.data");
            FileInputStream fileInputStream = new FileInputStream(file);
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
    
            Object goods = objectInputStream.readObject();
            System.out.println( JSONUtil.toJsonStr( goods ) );
    
        }
    
    
  9. goods对象

    package com.lomi.entity;
    
    import com.lomi.utils.CodeUtil;
    
    import cn.hutool.core.util.IdUtil;
    import com.lomi.utils.IdUtils;
    
    import java.io.Serializable;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
    
    public class Goods implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
    
        private Long id;
    
        private Date createDate;
    
        private String name;
    
        private Integer stock;
    
    	private String des;
    
        private String des2;
    
        private String data;
    
        public Date getCreateDate() {
            return createDate;
        }
    
        public void setCreateDate(Date createDate) {
            this.createDate = createDate;
        }
    
        public Goods(String name ) {
        	this.name = name;
        }
        public Goods() {
    
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public String name(int  i) {
            return "name????" + i;
        }
    
        public Goods setName(String name) {
            this.name = name == null ? null : name.trim();
            return this;
        }
    
        public Integer getStock() {
            return stock;
        }
    
        public void setStock(Integer stock) {
            this.stock = stock;
        }
    
        public String getDes() {
            return des;
        }
    
        public void setDes(String des) {
            this.des = des == null ? null : des.trim();
        }
    
        public String getData() {
            return data;
        }
    
        public void setData(String data) {
            this.data = data == null ? null : data.trim();
        }
    	public String getDes2() {
    		return des2;
    	}
    
    	public void setDes2(String des2) {
    		this.des2 = des2;
    	}
    
    
        public static Goods randomGoods() {
        	Goods goods = new Goods();
    		goods.setId(IdUtils.nextId());
    		goods.setData(  CodeUtil.getRandomNum18() );
    		goods.setDes( CodeUtil.randomCode(16) );
    		goods.setDes2( CodeUtil.randomCode(16) );
    		goods.setName( CodeUtil.randomCode(3) );
    		goods.setStock( Integer.valueOf( CodeUtil.randomNumCode(4) ) );
            goods.setCreateDate( new Date());
    
        	return goods;
        }
    
    
    
    
    }
    

标签:goods,String,接口,public,序列化,Serializable,serialVersionUID,name
From: https://www.cnblogs.com/cxygg/p/17284592.html

相关文章

  • 5G网元功能与接口
    5G网元功能与接口5G移动通信整体网络架构5G网络功能之间的信息交互可以基于两种方式表示:其一为基于服务表示;其二为基于点对点表示。实时部署时,也可以采用两种方式相结合的表示方式。并不是所有的接口都适于基于服务表示,对于有些接口点对点表示方式更加适合。从图中可以看出,控......
  • shell命令调用http接口(curl方式)
    shell命令调用http接口(curl方式) 样例1、curl-H"Content-Length:0"-XGET"http://127.0.0.1:8080"2、curl-H"Content-Type:application/json"-H"connection:Keep-Alive"-s-XPOST-d'{"id":"1"......
  • 第五篇:接口
    第五篇:接口目录第五篇:接口一、接口的基本使用1接口的介绍2定义接口2.1接口的简单实用2.2多态的概念【接口实现】2.3接口内部表示2.4接口类型转成struct2.5空接口2.6匿名空接口二、接口的嵌套与实现多个接口1实现多个接口2接口嵌套3接口的零值一、接口的基本使用1接......
  • Postman测试文件上传接口
         定义请求方式和请求路径请求体选择bodybody下选择form-data在参数中输入filekey值输入完file后,在下拉框中选择file此时value会显示一个SelectFiles按钮,点击按钮即可打开我的电脑并选择需要上传的文件点击发送请求即可如何该接口需要请求头......
  • MyBatis-Spring包自动扫描MyBatis Mapper接口并将其注册为Spring Bean
    学习spring整合mybatis时,写SQL语句的Mapper接口明明没有任何被spring接管的痕迹(前面没有注解)但在serviceimpl类中却可以被自动装载。 BookDao.java(mapper接口类):packagecom.itheima.dao;importcom.itheima.domain.Book;importorg.apache.ibatis.annotations.Delete;imp......
  • 使用drf的序列化类实现增删改查接口
    目录什么是DRF安装DRF基于原生创建五个接口基于rest_framework的增删改查查询多条数据流程创建表创建序列化类创建视图类增加路由查询单条数据序列化类不变视图类定义对象新增路由新增一条数据序列化类视图类修改一条数据视图类删除一条数据序列化之钩子函数校验局部钩子全局钩子......
  • 微店商品详情接口,微店商品数据接口,微店商品优惠券接口封装代码教程
    业务场景:作为全球最大的B2C电子商务平台之一,微店平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入微店平台,微店平台提供了丰富的API接口,其中商品详情接口是非常重要的一部分。大家有探讨稳定采集微店整站实时商品详情数据接口,通过该接口开发者可以更......
  • 脑干软件接口实现
    接口分析今天写了一个删除用户运动指数的接口,运动指数包括了两个属性,一个每周运动次数和每次运动时间,我们需要做的就是把这两个字段清空,因为这个字段在user表中,同时我们删除他的时候不能把其他的属性删除,所以我们就不能直接使用delete方法,而是删除再添加再修改。问题与解决重......
  • JNDI(Java Naming and Directory Interface–Java命名和目录接口)
    JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)为应用程序提供了一种通过网络访问远程服务的方式。本节我们学习如何通过JNDIAPI注册和访问JDBC数据源对象。读者如果需要了解更多JNDI相关细节,则可参考JNDI规范文档。JNDIAPI的命名服务可以把一个逻辑名称和一个具......
  • python接口自动化pytest+yaml+allure
    简介分层common公共层data数据层test层+main文件其中pytest框架使用pytest.ini全局配置和conftest.py夹具test层下载对于的安装包编写对于的用例实现参数化编写对于的fixture和pytest全局配置常用pytest执行方法main方法:pytest.main(['-vs','-n2'])console:py......