serialVersionUID

什么是SerialVersionUId

Java语言在对对象进行序列化的时候需要的一个版本号, 这个版本号可以是编译期间生成或者程序员在内部定义好 格式如下:

 private static final long serialVersionUID= xxL

SerialVersionUId在序列化中的作用

Java语言在进行对实现seriallizable 接口的对象进行序列化的时候会把serialVersionUID写入文件(如果没有定义会由编译器完成)在进行反序列化的时候会先比较serialVersionUID 是否相同 如果相同会序列化  如果不相同会出现异常:

Exception in thread "main" java.io.InvalidClassException: Parameter; local class incompatible: stream classdesc serialVersionUID = -7159672487025754497, local class serialVersionUID = 65

翻译:

在线程 (main)中 无效类异常:类;不相容的本地类:类描述流 的serialVersionUID 为 -7159672487025754497而本地类的serialVersionUID 为65

例子:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class Parameter implements Serializable{
	
	//private static final long serialVersionUID = 'A';
	private int id = 7;
	private String name = "diqye";

	public Parameter(String value) {
		this.name = value;
	}
	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		ObjectOutputStream ops = new ObjectOutputStream(new FileOutputStream(new File("d:/parameter.obj")));
		ObjectOutputStream ops1 = new ObjectOutputStream(new FileOutputStream(new File("d:/parameter1.obj")));
		ops.writeObject(new Parameter("diqye2011"));
		ops1.writeObject(new Parameter("diqye2012"));
		//关闭处理
		ops.flush();
		ops.close();
		ops1.flush();
		ops1.close();
	//	ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/parameter1.obj")));
	//	Parameter p = (Parameter)ois.readObject();
	//	System.out.println(p.getId());
	//	System.out.println(p.getName());
	//	ois.close();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	

}

执行上述代码会 序列化到本地两个文件 

d:/parameter1.obj 和d:/parameter.obj

打开分解:

把这块注释打开运行下再分解文件

 //private static final long serialVersionUID = 'A';  //注释打开




至于版本号不对应 所抛的异常,请自行试验

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值