私が作っているゲームに最高得点クラスを書き込もうとしているので、スコアとスコアの値をスコアクラスに書いて、HighScoreクラスをチェックインしますそれが高い得点にある場合。 しかし、私はserialziationで簡単な問題を抱えていますが、私はエラーが何であるか分かりません。これは、コードされていますJavaシリアル化のEOF例外
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class HighScore<T extends Serializable & Comparable<T>> implements
Serializable, Iterable<T> {
private int size = 3;
private ArrayList<T> list;
private static final String HS_FILE = "resources/High_Scores.txt";
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
public String name;
public HighScore(int size) {
this.size = size;
list = new ArrayList<>(size);
}
public boolean add(T val) throws IOException, ClassNotFoundException {
readFile();
boolean addWorks = list.size() < size || list.get(list.size()
- 1).compareTo(val) < 0;
if (addWorks) {
list.add(val);
Collections.sort(list, Collections.reverseOrder());
if (list.size() > size) {
list.remove(size);
}
updateFile();
int i = 1;
for (Iterator<T> it = list.iterator(); it.hasNext();) {
Score n = (Score) it.next();
System.out.println(i + ": " + n.name + ", " + n.score + " points ");
i++;
}
}
return addWorks;
}
private void readFile() throws IOException, ClassNotFoundException {
ois = new ObjectInputStream(new FileInputStream(HS_FILE));
list = (ArrayList<T>) ois.readObject();
}
private void updateFile() throws FileNotFoundException, IOException {
oos = new ObjectOutputStream(new FileOutputStream(HS_FILE));
oos.writeObject(list);
}
@Override
public Iterator<T> iterator() {
return list.iterator();
}
}
次のようにスコアクラスは次のとおりです。
import java.io.Serializable;
public class Score implements Serializable, Comparable<Score> {
String name;
int score;
public Score(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Score{" + "name=" + name + ", score=" + score + '}';
}
@Override
public int compareTo(Score that) {
return this.score - that.score;
}
}
エラー出力が示すには、次のとおりです。
Dec 07, 2016 9:22:01 PM
brachabee2.entities.Player gameOver
SEVERE: null
java.io.EOFException
すべてのヘルプは素晴らしいことです!ありがとう!
あなたは**使用後**ストリームを閉じるべきですか?そのため、これらの一時ストリームへの参照をインスタンスフィールドに格納しないでください。したがって、最も使いやすいのは、[try-with-resourcesステートメント](https://docs.oracle.com/javase/8/docs/technotes/guides/language/try-with-resources.html)です。 – Holger