토너먼트에서 경쟁 데이터를 추적하는 클래스를 작성하고 있습니다. 이 클래스를 파일에 저장하려고하므로 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)
나는 이런 일이 왜 모르겠어요. 어떻게해야합니까?