对象的序列化和反序列化
把对象转换为字节序列的过程称为对象的序列化,Serialization //保存对象状态并可再次读取
把字节序列恢复为对象的过程称为对象的反序列化,Deserialization
应用: 把对象字节序列永久保存到硬盘上,在网络上传送对象的字节序列,通过序列化在进程中传递对象
只有实现了Serializable和Externalizable接口的类的对象才能被序列化
Serializable接口是一个标记接口 Public interface Serializable{ }
Externalizable接口继承自Serializable
对象输出流
ObjectOutputStream类用于对象的序列化,即将对象输出
//Person.java package object; import java.io.Serializable; public class Person implements Serializable { //序列化 /** * */ private static final long serialVersionUID = 1L; //序列化的ID标识 public String name; public int age; } //ObjectOutputStreamDemo package object; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class ObjectOutputStreamDemo { public static void main(String[] args) { File file = new File("Person.txt"); try { FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); Person person = new Person(); person.name= "tkj"; person.age=17; oos.writeObject(person); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
对象输入流
ObjectInputStream
package object; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class ObjectOutputStreamDemo { public static void main(String[] args) { //读取刚刚的Person File file = new File("Person.txt"); try { FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); Person person = new Person(); person.name= "tkj"; person.age=17; oos.writeObject(person); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
transient关键字:用来表示一个域不是对象序列化的一部分,被修饰的变量不会被序列化,static也有这样的作用
好难啊~~