Java的IO操作 - 对象的序列化、ObjectInputStream和ObjectOutputStream类 (三)

2014-11-24 11:49:54 · 作者: · 浏览: 56
w FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);

// 读取对象并放入List容器中
while(fis.available() > 0)
{
list.add((User)ois.readObject());
}

ois.close();
return list; // 返回List
}

static private void writeObj(Object[] objs,String fileName) throws Exception
{
// 使用命令行参数中指定的文件名
File file = new File(fileName);

// 创建流对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));

// 写入对象
for(Object o : objs)
{
oos.writeObject(o);
}

// 关闭流
oos.close();
}
}
注意,当我们想要向一个已经存在的文件中追加对象时,应该重写ObjectOutputStream的writeStreamHeader()方法,并空实现。因为,ObjectOutputStream在写入数据的时候会加上一个特别的流头(Stream Header),在读取数据的时候会先检查这个流头。所以我们在向文件中追加对象的时候ObjectOutputStream就会再次向文件中写入流头,这样在读取对象的时候会发生StreamCorrupedException异常。