附加数据时出现java.io.StreamCorruptedException

时间:2014-07-01 01:27:51

标签: java

我已经编写了这个用于在ObjectOutputStream中追加数据的java代码,但这段代码正在抛出(java.io.StreamCorruptedException :)。如果此代码无法正常工作,请提供帮助,请提供替代方法,以便在ObjectOutputStream中附加数据。

import java.awt.Toolkit;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Vector;
import javax.swing.JOptionPane;


class Data implements Serializable {

    private static final long serialVersionUID = 1L;
    private String time;
    private String note;

    public Data(String time, String note) {
        this.time=time;
        this.note=note;
    }

    public String getTime() {
        return time;
    }

    public String getNote() {
        return note;
    }
}


public class S extends ObjectOutputStream {

    String t, n;

    public S(FileOutputStream w, String time, String note) throws Exception {
        super(w);
        t=time;
        n=note;
        writeStreamHeader();
    }

    protected void writeStreamHeader() throws IOException {
        writeObject(new Data(t,n));
        reset();
     }


    public static void rd() {

        Vector v = new Vector();
        Data d;

        try
        {
            ObjectInputStream r = new ObjectInputStream(new FileInputStream("file.cer"));

            for(int i=1; i<=100; i++) {
                try { v.add(r.readObject()); }
                catch(EOFException exp){
                    r.close();
                    break;
                }
            }
            for(int i=0; i<v.size(); i++) {
                d = (Data)v.elementAt(i);
                System.out.println(d.getNote()+" "+d.getTime());
            }
        }

        catch(Exception exp) {
            Toolkit.getDefaultToolkit().beep();
            JOptionPane.showMessageDialog(null, String.format("ERROR = %s\nCLASS = S", exp.getClass()));
            System.out.println(exp.getClass());
            System.exit(0);
        }
    }

    public static void main(String arg[]) throws Exception {
        FileOutputStream w  = new FileOutputStream("file.cer",true);
        new S(w,"99:59:59:99","Maxima"); 
        new S(w,"00:00:00:00","Minima"); 
        rd();
    }
}

1 个答案:

答案 0 :(得分:0)

  

如果此代码无法正常工作

你是对的。它无法正常工作。

  

然后请给出在ObjectOutputStream中附加数据的替代方法。

如果要附加文件,

writeStreamHeader()必须 ,但如果文件是新创建的,则必须调用super.writeStreamHeader()。它当然不应该随时致电writeObject()