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比较安全。

  • 相关阅读:
    MVC框架及其应用
    《企业应用架构模式》-阅读笔记1
    《架构之美》阅读笔记3
    《架构之美》-阅读笔记2
    《架构之美》阅读笔记1
    一线架构师实践指南第三篇—— Refined Architecture(预习)
    知识图谱_示例图
    一个考研党的敷衍的毕业设计_知识图谱
    一线架构师阅读笔记三
    一线架构师阅读笔记二
  • 原文地址:https://www.cnblogs.com/simple-code/p/5121837.html
Copyright © 2011-2022 走看看