1

プログラムを実行するたびに、ファイル上の同じオブジェクトをシリアル化したい。これは私の問題を説明するための単純なアルゴリズムです。

初めに、私はにを保存Stringwriterます。最後に私はファイルを読みました。このプログラムの目標は、プログラムをX時間実行し、オブジェクトを保存して画面X時間に印刷することです。

class ReadFile {

    static ObjectOutputStream writer = null;

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        writer = new ObjectOutputStream(new FileOutputStream("trace", true));
        store("String");

        if (writer != null) {
            writer.close();
        }

        open("file.tmp");

    }

    static public void store(String chaine) {
        if (writer == null) {
            return;
        }
        try {
            writer.writeObject(chaine);
        } catch (IOException ex) {
        }
    }

    static public void open(String file) throws FileNotFoundException, IOException, ClassNotFoundException {
        StringBuilder str = new StringBuilder();
        ObjectInputStream objs;
        try {

            objs = new ObjectInputStream(new FileInputStream(file));
            try {
                while (true) {
                    Object obj = objs.readObject();
                    str.append(obj.toString());
                }
            } catch (EOFException ex) {
            }
            objs.close();

        } catch (Exception ex) {
            ex.printStackTrace(System.err);
        }
    }
}

このプログラムを実行すると、次のエラーが発生します:

java.io.StreamCorruptedException: invalid type code: AC
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
        at ReadFile.open(ReadFile.java:47)
        at ReadFile.main(ReadFile.java:35)

何ができますか?

4

1 に答える 1

1

この投稿によると、オブジェクト出力ストリームに追加することはできません。これは、基になるFileOutputStreamを追加モードで開くことによって実行しようとしています。その投稿には、AppendableObjectOutputStreamを作成する、または追加せずにFileOutputStreamを開くことができるような解決策が記載されています。

于 2012-11-05T15:04:22.777 に答える