2012-11-05 2 views
1

프로그램을 실행할 때마다 파일에 같은 개체를 직렬화하려고합니다. 이것은 내 문제를 설명하는 간단한 알고리즘입니다.예외 StreamCorruptedException : 유효하지 않은 형식 코드 : AC

나는 여기서 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 게시물에 따르면 추가 모드에서 기본 FileOutputStream을 열어서 수행하려는 ObjectOutputStream에 추가 할 수 없습니다. 당신이 AppendableObjectOutputStream을 만들 수 있도록 그 게시물에 언급 된 해결책이있다. 그렇지 않으면 추가하지 않고 FileOutputStream을 열 수있다.