java Serializable 序列化 反序列化

来源:互联网 发布:tonica和声软件怎样 编辑:程序博客网 时间:2024/05/01 05:14

java 序列化和 反序列化例子:

//序列化对象类 必须实现Serializable  接口

public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String id;
private String age;
Person(){}
Person(String name,String id,String age){
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}

}


//序列化类

public class TestIo {

public static void main(String[] args) throws IOException, ClassNotFoundException {
File filepath = new File("D://person.java");
FileOutputStream fos = new FileOutputStream(filepath);
FileInputStream fis = new FileInputStream(filepath);
ObjectOutputStream oop = new ObjectOutputStream(fos);
ObjectInputStream ins = new ObjectInputStream(fis);
Person per = new Person("张三","001","23");
Person per1 = new Person("张三1","002","24");
Person per2 = new Person("张三2","003","25");
Person per3 = new Person("张三3","004","26");
Person per4 = new Person("张三4","005","27");
Person per5 = new Person("张三5","006","28");
List<Person> personList = new ArrayList<Person>();
List<Person> personList1 = null;
personList.add(per);
personList.add(per1);
personList.add(per2);
personList.add(per3);
personList.add(per4);
personList.add(per5);
//序列化
oop.writeObject(personList);
//反序列化
personList1 = (List<Person>) ins.readObject();

fos.close();
oop.close();
fis.close();
ins.close();
}

}

注意节点:

1.被序列化类必须实现 Serializable接口

2.由于序列化破坏了java的封装特性,所以在想要把指定的某个敏感字段不被序列化时可以使用 关键字:transient 

   如:private transient String id;  这里的id 字段将不会序列化。

3.如果被序列化类里包含引用类型的字段那么 这个引用类型的类 也必须是实现了 Serializable 接口的 否则将会报错 NotSerializableException  .

4.java 序列化对象的时候,如果多次序列化了同一个对象,则java序列化机制的实际操作是:仅仅在第一次的时候将对象转化为字节序列到本地(或者指定方向输出)。所以在对象序列化之后再去改变对象中的属性,然后再次序列化此时改变的内容不会被序列化到本地。

5.实例化对象中方法和静态属性不会被序列化。


如果前面已经序列化了该对象 ,然后再次调用序列化方法时。此时程序只输出序列化的编码。并不会真正的将 对象再次序列化。

0 0
原创粉丝点击