对象流:
ObjectInputStream和ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object obj)方法,将一个对象obj写入到一个文件,使用readObject()读取一个对象。
构造方法:
ObjectInputStream (InputStream in)
ObjectOutputStream(OutputStream out)
当准备将一个对象写入文件的时候,首先用OutputStream的子类创建一个输出流。
OutputStream outStream = new FileOutputStream("file_name");
ObjectOutputStream objstream = new ObjectOutputStream(outStream);
当使用对象流写入或者读取对象的时候,必须保证该对象是序列化的,这样是为了保证对象能够正确的写入文件,并能够把对象正确的读回程序。
所谓的对象的序列化就是将对象转换成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。在Java中提供了ObejctInputStream 和ObjectOutputStream这两个类用于序列化对象的操作。用于存储和读取对象的输入输出流类,要想实现对象的序列化需要实现Serializable接口,但是Serializable接口中没有定义任何的方法,仅仅被用作一种标记,以被编译器作特殊处理。
例子:
package com.asiainfo.demo
import java.io.Serializable;
import java.util.Date;
public class Person implements Serializable{ //实体类
public String name;
public int year;
public Date birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
/*
*重写toString函数
*/
public String toString(){
return name.toString() + " " + year + " " + birth.toString();
}
}
//写对象
public class out{
public static void main(String[] args) throws IOException{
FileOutputStream fos = new FileOutputStream("D:\\person.obj");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Person p1 = new Person();
Person p2 = new Person();
p1.setName("张璐豪");
p1.setYear(21);
p1.setBirth(new Date(00,6,12));
p2.setName("曹志杰");
p2.setYear(24);
p2.setBirth(new Date(00,11,16));
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
fos.close();
}
}
//读对象
public class in{
public static void main(String[] args)throws IOExcepiton(){
FileInputStream fis= new FileInputStream("D:\\person.obj");
ObjectInputStream ois = new ObjectInputStream(fis);
Person p1 = (Persion)ois.readObcjet();
Person p2 = (Persion)ois.readObcjet();
System.out.println(p1);
System.out.println(p2);
}
}