2012-11-05 48 views
1

我想序列化文件上的同一个对象,每次当我运行一个程序。这是一个简单的算法来解释我的问题。异常StreamCorruptedException:无效的类型代码:AC

在begening我存储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) 

我能做些什么吗?

+0

您应该检查它们,看看它们是否包含可能指出问题的任何有用信息,而不是捕捉异常并丢弃它们。另外,这是代码的第35行? – DaveRlz

+0

第35行是:'open(“file.tmp”);' – Mehdi

+0

为什么不先将所有对象读入列表中,然后添加要追加的对象,然后回写到文件中。我知道这很耗时间,但是它对我来说很合适。看看这里[链接](http://stackoverflow.com/questions/1194656/appending-to-an-objectoutputstream) – saikumarm

回答

1

根据this后,您不能附加到ObjectOutputStream,您尝试通过以附加模式打开基础FileOutputStream来执行此操作。在这篇文章中提到了一个解决方案,以便创建一个AppendableObjectOutputStream,或者您可以在不追加的情况下打开FileOutputStream。

相关问题