一.IO包中的类层次关系图
1.字节输入流(InputStream)
2.字节输出流(OutputStream)
3.字符输入流(Reader)
4.字符输出流(Writer)
二.对象序列化(保存对象)
所谓的对象序列化(在某些书中也叫串行化),是指将对象转换成二进制数据流的一种实现手段。通过将对象序列化,可以方便地实现对象的传输及保存。
在Java中提供有ObjectlnputStream与ObjectOutputStream这两个类用于序列化对象的操作。这两个类是用于存储和读取对象的输入输出流类,只要把对象中的所有成员变量都存储起来,就等于保存了这个对象,之后从保存的对象之中再将对象读取进来就可以继续使用此对象。
ObjectInputStream 类与ObjectOutputStream 类,用于帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用做一种标记, 以被编译器作特殊处理。
可序列化的对象
package dataStructure;
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String toString() {
return "名: "+this.name+", 年龄: "+this.age;
}
}
使用ObjectOutputStream与ObjectInputStream 将Person类的对象保存在文件之中
package dataStructure;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
/*类Person实现了Serializable 接口,所以此类的对象可序列化。*/
/*使用ObjectOutputStream与ObjectInputStream 将Person类的对象保存在文件之中。*/
public class SerializableDemo {
public static void main(String[] args) throws Exception{
File f =new File("SerializedPerson");
serialize(f);
deserialize(f);
}
public static void serialize(File f) throws Exception {
OutputStream outputFile = new FileOutputStream(f);
ObjectOutputStream cout =new ObjectOutputStream(outputFile);
cout.writeObject(new Person("jojo", 18));
cout.close();
}
private static void deserialize(File f) throws Exception{
InputStream inputFile = new FileInputStream(f);
ObjectInputStream cin = new ObjectInputStream(inputFile);
Person p = (Person)cin.readObject();
System.out.println(p);
}
}