java 序列化的一些问题

本文通过实验探讨了Java中对象序列化的基本原理,特别是serialVersionUID的作用及其如何影响序列化过程。文章发现即使对象属性发生变化,已序列化的对象仍能成功反序列化,但新增或删除的属性将不受影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java 将对象序列化到文件后,若原对象更改了属性名称,增加/删除方法是否会反序列化失败?我试验了下,得出的结果是

 

1、序列化是根据private static final long serialVersionUID = 1L;来控制两边的版本的,如果这个不一致,即使是相同对象也会反序列化报错,因此这个是核心。

2、序列化后,若文件属性变更/删除/增加 将不影响反序列化成功。只是该值不会置入而已。

3、方法是不序列化的。 附上代码,大家可以试试。

 

代码如下:

 

/**
 *
 * 描述
 *
 * @author 锅巴
 * @version 1.0 2010-7-5
 */
public class Test implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = 2L;
   
    private String id;
   
    private String name;
   
    private String content;
   
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
   
    public String toString(){
        return id + "-" + name;
    }
   
   
    public static void main(String[] args) throws Exception {
       
          String fileName = "D:\\workspace_mvn\\my-nom\\obj.txt";
//        Test t = new Test();
//        t.setId("123456");
//        t.setName("hello world");
//        toFile(fileName,t);
       
       
          Test t = (Test)fromFile(fileName);
          System.out.println(t);
       
       
    }
   
    private static void toFile(String fileName,Object object) throws FileNotFoundException, IOException{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName,false));
        oos.writeObject(object);
        oos.close();
    }
   
    private static Object fromFile(String fileName) throws FileNotFoundException, IOException, ClassNotFoundException{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
        return ois.readObject();
    }
   
   

   
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值