zoukankan      html  css  js  c++  java
  • [java基础] serialVersionUID

    serialVersionUID的作用

    个人理解:java序列化就是指把对象转化成字节序列,反序列化是指从字节序列中恢复java对象。

    用eclipse写一个类实现serializable接口时,有两种选择,一是使用默认的序列号1L,另一个是自动生成。

    这里“自动生成”是:根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。类A放在包1里和放在包2里生成的serialVersionUID是不同的。

    public static InputStream objectToStream(java.lang.Object obj) throws Exception 
    {     
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        ByteArrayInputStream byteIn=null;
        try 
        {   
    	ObjectOutputStream oo = new ObjectOutputStream(byteOut);  
    	oo.writeObject(obj);
    	oo.flush();
    	byteIn = new ByteArrayInputStream(byteOut.toByteArray());
    	byteOut.close();   
            oo.close(); 
    	
        } 
        catch (Exception e) 
        {  
    	throw e;  
    			
        }  
        return byteIn; 
    }
    
    
    public static java.lang.Object streamToObject(InputStream input) throws Exception 
    {  
        java.lang.Object obj=new java.lang.Object(); 
        try 
        {     
            ObjectInputStream oi = new ObjectInputStream(input);   
    	obj = oi.readObject(); 
    	oi.close(); 
        } 
        catch (Exception e) 
        {  
    	throw e;
        }
        return obj;
    } 
    

    上面两个方法分别实现了序列化和反序列化。

    注意:

    1. 序列化和反序列化必须用相同的serialVersionUID
    2. 序列化时,对象的包信息也写在了字节序列里,所以反序列化时,对象的包路径要保持一致。比如原来将com.helloc001.test1序列化了,那反序列化时必须也存在com.helloc001.test1.

    所以我觉得用默认的1L比较方便,用自动生成的serialVersionUID比较安全。

  • 相关阅读:
    网络需求分析课堂作业
    工程招标与投标课堂作业
    burpsuite Pro下载安装及破解 | JDK安装和配置
    渗透测试环境的搭建
    web应用基础架构
    为Linux环境安装图形化界面
    Linux基本操作
    markdown语法教程(更新中)
    VMware导入和删除虚拟机文件
    Java求幂集与List的浅拷贝深拷贝问题
  • 原文地址:https://www.cnblogs.com/simple-code/p/5121837.html
Copyright © 2011-2022 走看看