JavaIO流序列化与反序列化ObjectOutputStream

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储只能将支持 java.io.Serializable 接口的对象写入流中。

writeObject 方法用于将对象写入流中。

可以被保存的信息

·类名

·属性

不能被保存的元素:

·方法

·静态属性值不会被保存

·被transient修饰的属性不会被保存

 

transient

transient:非静态数据不想被序列化可以使用这个关键字修饰。

 

不被序列化的数据有:

1, transient修饰

private transient String name;

2,静态数据

Private static String name;

 

构造方法

 

ObjectOutputStream(OutputStream out)
创建写入指定 OutputStream ObjectOutputStream

 

常用方法

void

writeObject(Object obj)
将指定的对象写入 ObjectOutputStream

 

接口 Serializable

类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。

Serializable:用于给被序列化的类加入ID号。

                      用于判断类和对象是否是同一个版本。

ObjectInputStream(对象反序列化)

 

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

ObjectStreamDemo.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import cn.bean.Person;

public class ObjectStreamDemo {
   public static void main(String[] args) throws IOException,ClassNotFoundException {
      writeObj();
      readObject();
   }

   public static void writeObj() throws IOException, IOException {
      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\obj.object"));
      // 对象序列化,被序列的对象必须实现Serializable接口。
      oos.writeObject(new Person("小强", 20));
      oos.close();
   }

   public static void readObject() throws IOException, ClassNotFoundException {
      ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\obj.object"));
      Person p = (Person) ois.readObject();
      System.out.println(p.getName() + "," + p.getAge());
   }
}

Person.java

import java.io.Serializable;

public class Person implements Serializable {
   private String name;
   private int age;

   public Person() {
      super();
   }

   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;
   }
}