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

  • 相关阅读:
    Python实战之SocketServer模块
    CentOS出错You don't have permission to access on this server
    系统瓶颈分析
    loadrunner支持https协议的操作方法-经验总结
    Loadrunner上传与下载文件脚本
    Loadrunner之HTTP接口测试脚本实例
    Android界面性能调优手册
    Loadrunner11.0 录制手机App脚本的方法
    资源监控工具--spotlight
    Jmeter常见问题
  • 原文地址:https://www.cnblogs.com/simple-code/p/5121837.html
Copyright © 2011-2022 走看看