码迷,mamicode.com
首页 > 编程语言 > 详细

Java中serialVersionUID的作用

时间:2015-05-20 16:29:43      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:java   对象   


我们有时需要将一个对象序列化,保存在本地,或者发送到网络,然后再反序列还原该对象。通常这种对象的类需要实现Serializable接口,在实现该接口时,一般需要提供一个静态变量,像这样子:

public class Throwable implements java.io.Serializable {
    private static final long serialVersionUID = -3042686055658047285L;

如果你定义的类实现了Serializable接口,但是没有提供一个serialVersionUID,像Eclipse这种IDE一般会提醒你要添加该静态变量,并且能帮助你自动生成。那么这个serialVersionUID的作用是啥呢?


当我们将一个对象序列化保存到本地,然后把类的某个成员变量修改了,或者添加了,你再反序列化该对象,能成功反序列化吗?如果没有serialVersionUID,则自然是会报错的,但是,如果有该serialVersionUID变量,当你修改了某个成员变量的名字,或者添加了某个成员变量,或者添加修改了方法,都可以成功反序列化,此处注意一点,被修改了名字的变量名,其实就是相当于一个新变量名。总的来说,serialVersionUID的作用是为了保证对象序列化和反序列化时,类的版本的兼容,


下面给出一个例子,大家可以根据这个例子进行测试学习。


public class SerializableDemo extends Object implements Serializable {

	private static final long serialVersionUID = -3496979029493924435L;

	public byte b = 112;

	// int c = 32;

	public byte getB() {
		return b;
	}

	public void setB(byte b) {
		this.b = b;
	}

	public void saveObject() {
		try {
			FileOutputStream fos = new FileOutputStream(new File(
					"E:\\demo2.txt"));
			ObjectOutputStream os = new ObjectOutputStream(fos);
			SerializableDemo s = new SerializableDemo();

			os.writeObject(s);
			os.flush();
			os.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void readObject() {
		try {

			FileInputStream fis = new FileInputStream(new File("E:\\demo2.txt"));
			ObjectInputStream ois = new ObjectInputStream(fis);

			SerializableDemo s2 = (SerializableDemo) ois.readObject();
			System.out.println(s2.getB());

			ois.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		SerializableDemo ser = new SerializableDemo();
		// ser.saveObject();
		ser.readObject();
	}
}



Java中serialVersionUID的作用

标签:java   对象   

原文地址:http://blog.csdn.net/chziroy/article/details/45870337

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!