cxr1217 发表于 2013-2-3 13:57:35

java序列化和反序列化

为什么JAVA要实现对象序列化?
简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)。在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!
 
代码演示:
第一步:创建我要序列化和反序列化的类:
package com.rocy.pojo;import java.io.Serializable;public class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private String city;private int age;private String describe;public Person(String name, String city, int age, String describe) {this.name = name;this.city = city;this.age = age;this.describe = describe;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getDescribe() {return describe;}public void setDescribe(String describe) {this.describe = describe;}@Overridepublic String toString() {return this.getName() + " " + this.getCity() + " " + this.getAge()+" "+this.describe +" "+serialVersionUID;}} 
 第二步:序列化和反序列化测试:
public class Test {public static void main(String[] args) throws Exception {// 序列化过程:// 1 使用FileOutputStream 输出流创建 ObjectOutputStream 从而对对象进行流操作ObjectOutputStream outObj = new ObjectOutputStream(new FileOutputStream("d://a.txt"));// 2 创建一个对象Person person = new Person("rocyx", "beijing", 20, "美女");// 3 将对象写入文件outObj.writeObject(person);// 4 刷新流中缓冲outObj.flush();// 5 关闭流outObj.close();// ---序列化 结束 。 这个时候就将流对象输出到了文件中了// 反序列化过程// 1 创建一个输入流ObjectInputStream inObj = new ObjectInputStream(new FileInputStream("d://a.txt"));// 2 将文件中数据读取并返回对象Object obj = inObj.readObject();// 3 关闭流inObj.close();// --- 反序列化结束,这个时候可以打印该对象信息,该对象就是序列化到文件中的内容。obj = (Person) obj;System.out.println("[" + obj.toString() + "]");}} 
  对于不想被反序列化的字段可以用 transient 关键字,凡是使用transient 的字段在反序列化的时候都被忽略
  可以将Person的一个字段,如:private transient String city;
   再次运行Test,这个时候,city字段打印出null,没有被反序列化出来。
页: [1]
查看完整版本: java序列化和反序列化