2013-03-02 3 views
2

토너먼트에서 경쟁 데이터를 추적하는 클래스를 작성하고 있습니다. 이 클래스를 파일에 저장하려고하므로 ObjectInputStream을 사용하고 있습니다. 필자가 작성한 클래스는 Serializable을 구현한다. 나는 EOFException을 얻고 있으며, SO 및 다른 곳에서 찾은 솔루션 중 실제로이 문제를 해결하지 못했습니다.ObjectInputStream이 EOFException을 던졌습니다.

내 파일 라이터입니다

public void writeToFile(String path) { 
    File f = new File(path); 
    if(f.exists()) f.delete(); 

    try { 
     OutputStream fileOut = new FileOutputStream(path); 
     OutputStream bufferOut = new BufferedOutputStream(fileOut); 
     ObjectOutput output = new ObjectOutputStream(bufferOut); 

     output.writeObject(this); 
    } catch(IOException e) {} 
} 

내 파일 리더는 다음과 같습니다

public static DivisionDataFTC readFromFile(String path) { 
    try { 
     InputStream fileIn = new FileInputStream(path); 
     InputStream bufferIn = new BufferedInputStream(fileIn); 
     ObjectInput input = new ObjectInputStream(bufferIn); 

     System.out.println(input.read()); 
    } catch(Exception e) { 
     System.out.println(path); 
     e.printStackTrace(); 
    } 

    if(1==1) throw new Error("Could not read DivisionDataFTC at " + path); 
    return null; 
} 

내가 성공적으로 데이터를 기록 - 나는 파일이 하지 비어 있음을 확인했습니다. (해당 내용이 있다면, 일관되게 7.99kb입니다).

ObjectOutputStream의 인스턴스 생성시 오류가 발생하지 않습니다. 이것은이 질문을 다른 것으로 만드는 것입니다. 오류는 readObject() 호출에서 발생합니다. 내 출력은 EOFException 현저하게 긴 :

java.io.EOFException 
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369) 
    at java.util.ArrayList.readObject(ArrayList.java:733) 
    (...cut out most of this because nobody wants to read it...) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369) 
    at tournamentftc.DivisionDataFTC.readFromFile(DivisionDataFTC.java:297) 
    at firstscouting.FIRSTScouting.runGUI(FIRSTScouting.java:82) 
    at firstscouting.FIRSTScouting.main(FIRSTScouting.java:101) 
Exception in thread "main" java.lang.Error: Could not read DivisionDataFTC at C:\Users\Noah\Desktop\out.ser 
    at tournamentftc.DivisionDataFTC.readFromFile(DivisionDataFTC.java:303) 
    at firstscouting.FIRSTScouting.runGUI(FIRSTScouting.java:82) 
    at firstscouting.FIRSTScouting.main(FIRSTScouting.java:101) 

나는 이런 일이 왜 모르겠어요. 어떻게해야합니까?

답변

5

당신은, ObjectOutputStream에를 닫습니다 당신은 당신의 출력 스트림을 닫을 필요

ObjectOutput output = new ObjectOutputStream(bufferOut); 
output.writeObject(this); 
output.close(); 
3

시도하고 당신은 또한 readObject에 전화 태어나 셨한다() 읽을 수 없습니다.