本人第一次写java程序,一下接触这么多新东西头都大了……
遇到的问题:
要根据用户选择,向一个文件写一个类(Student)的实例,使用FileOutputStream与ObjectOutputStream流,FileOutputStream初始化为:
fileOutputStream = new FileOutputStream(fileStorage, true);  // fileStorage是File的实例。追加写方式。(append)
使用objectOutputStream.writeObject(student)进行写入,写入前建立流,写入后关闭流。
student = (Student) objectInputStream.readObject()用来读出。读出前建立流,读出后关闭流。
由于每一次启动写操作时都会写入一个标记头,造成读入时只能读取第一个写入的记录。
网上搜了半天,搜得如下结论:ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.
因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.
所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.
被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,是则调用super.writeStreamHeader();
若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法.请教大家,该如何实现?
本人初学,水平低。打开类库中ObjectOutputStream类,看相关方法,发现根本看不懂……更不知道该如何去覆盖那些方法了。
以前没发过贴,没什么分,就不给太多了……

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【ylqndscylq】截止到2008-07-05 18:13:06的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html