Java序列化接口Serializable的功能简介说明
下文笔者讲述Serializable功能简介说明,如下所示
Serializable的功能
Serializable在java.io包中定义 用于将JAVA对象进行序列化和反序列化 序列化: 将一个JAVA对象以二进制流的方式持久化到数据库、文件中,或用于大对象暂存、网络传输、使用序列化实现深度克隆 反序列化: 将持久化在数据库或文件中的二进制数据 使用流的方式读取出来重新构造成一个和之前内容相同的JAVA对象 Serializable序列化接口没有任何方法或字段,只用于标识可序列化的语义 当一个对象实现Serializable接口 则这个对象中所有信息(除static、transient修饰的变量信息外) 的其它信息将自动序列化
serialVersionUID功能
通常情况下 serialVersionUID是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段 对象在反序列化时 如果serialVersionUID值不同,则会抛出InvalidClassException的异常,则反序列化失败例: User.java
import java.io.Serializable;
/*
* Serializable:用于给被序列化的类加入ID号。
* 用于判断类和对象是否是同一个版本。
*/
public class User implements Serializable/*标记接口*/ {
/**
* transient:非静态数据不想被序列化可以使用这个关键字修饰。
*/
private static final long serialVersionUID = 9527l;
// private transient String name;
private String name;
// private static int age;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
ObjectStreamDemo.java
public class ObjectStreamDemo {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
//writeObj();
readObj();
}
public static void readObj() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object"));
//对象的反序列化。
User p = (User)ois.readObject();
System.out.println(p.getName()+":"+p.getAge());
ois.close();
}
public static void writeObj() throws IOException, IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
//对象序列化。 被序列化的对象必须实现Serializable接口。
oos.writeObject(new User("java",18));
oos.close();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


