您的位置:首页 > 编程语言 > Java开发

Java的序列化机制

2017-03-06 10:38 120 查看
1. 所有实现序列化的类都必须实现Serializable接口,序列化有如下两个特点:

如果一个类可以被序列化,那么它的子类也可以被序列化

由于static代表类成员,trasient代表对象的临时数据,因此被声名为这两种类型的数据成员是不能被序列话的

2. 序列化和反序列化的实例

package StreamLearn;

import java.io.*;

/**
* Created by liujinhong on 2017/3/6.
*/

/**
* 序列化和返序列化实例
*/
public class SerialObjectTest {
public static void main(String[] args) {
People p = new People();
ObjectOutputStream oos = null;
ObjectInputStream ois = null;

//序列化
try {
FileOutputStream fos = new FileOutputStream("/Users/liujinhong/Desktop/test/ttt");
oos = new ObjectOutputStream(fos);

oos.writeObject(p);
} catch (Exception e) {
System.out.println(e);
} finally {

}

//反序列化
People p1;
try {
FileInputStream fis = new FileInputStream("/Users/liujinhong/Desktop/test/ttt");
ois = new ObjectInputStream(fis);

p1 = (People) ois.readObject();

System.out.println(p1.a);
System.out.println(p1.b);
System.out.println(p1.book.id);
} catch (Exception e) {
System.out.println(e);
} finally {

}
}
}

class People implements Serializable {
public int a = 1;
public transient int b = 2;
public Book book = new Book();
}

class Book implements Serializable {
public int id = 1;
}


3. 什么情况下需要使用序列化?

通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中

序列化能实现深复制,即可以复制引用的对象

4. serialVersionUID作用?

在序列化和反序列化的过程中,serialVersionUID起着非常重要的作用,每一个类都有一个特定的serialVersionUID,在反序列化的过程中通过serialVersionUID来判断类的兼容性。如果不兼容会跑出InvalidClassException异常。

5. 自定义serialVersionUID的优点?

提高程序运行效率

提高程序在不同平台上的兼容性

增强各个版本的可兼容性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: