Java SE 第8章流和文件–对象流
一、ObjectOutputStream类实现对象的序列化,即把对象写入字节流。该类是OutputStream的子类。该类也实现了ObjectOutput接口(支持对象序列化)。
该类的一个构造方法如下:
ObjectOutputStream(OutputStream OutStream)throws IOException
其中,参数OutStream是将被写入对象序列化的输出流。
该类常用的方法及功能:
final void writeObject(Object object) 写入一个obj到调用的流中
void writeInt(int i) 写入一个int到调用的流中
void writeBytes(String str) 写入代表str的字节到调用的流中
void writeChar(int c) 写入一个char到调用的流中
二、ObjectInputStream类实现对象的反序列化,即把对象从一个字节流中读取出来。该类是InputStream的子类。该类也实现了ObjectInput接口(支持对象序列化)。该类的一个构造方法如下:
ObjectInputStream(InputStream InputStream)throws IOException
其中,参数InputStream是将被写入对象序列化的输入流。
该类常用的方法及功能:
final Object readObject 从流中读取对象
int readInt() 从流中读取一个32位的int值
String readUTF() 从流中读取UTF-8格式的字符串
Char readChar() 读取一个16位的char值
这是一个Person对象
public class Person implements Serializable{
private String idCard;
private String name;
private int age;
public Person(String idCard,String name,int age){
this.idCard=idCard;
this.name=name;
this.age=age;
}
//get和set方法省略
}
注意:此Person对象实现了接口Serializable ,此接口中没有定义任何方法,它只是简单地指示一个类可以被序列化。如果一个类是可序列化的,则它的所有子类也是可序列化的。
Serializable接口定义如下:
public interface Serializable{
}
示例:利用ObjectOutputStream把上述Person类型的对象写入到文件(d:\Person.tmp)中。
1)创建一个ObjectOutputStream的对象
2)创建一个Person的对象
3)把对象写入到文件中
4)最后关闭流
package ch08;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo {
public static void main(String[] args) {
ObjectOutputStream obs=null;
try{
obs=new ObjectOutputStream(new FileOutputStream("d:\\Person.tmp"));(1)
Person person=new Person("121001","张三",25);(2)
obs.writeObject(person);(3)
obs.flush();
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(obs!=null){
obs.close();(4)
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
示例:利用ObjectInputStream从文件(d:\Person.tmp)中读取一个Person类型的对象。
1)创建一个ObjectInputStream对象
2)接收对象
3)打印
4)关闭流
package ch08;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ObjectInputStream ois=null;
try{
ois = new ObjectInputStream(new FileInputStream("d:\\Person.tmp"));(1)
Object obj=ois.readObject();(2)
if(obj!=null){
Person person=(Person)obj;
System.out.println("编号:"+person.getIdCard()(3)
+"姓名:"+person.getName()
+"年龄:"+person.getAge());
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(ois!=null){
ois.close();(4)
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
效果图: