Java 另一个序列化问题
我一直在尝试反序列化分数列表。我花了一整天的时间在这里搜索,但找不到解决办法。。我的代码如下所示:Java 另一个序列化问题,java,serialization,Java,Serialization,我一直在尝试反序列化分数列表。我花了一整天的时间在这里搜索,但找不到解决办法。。我的代码如下所示: public class Score implements Comparable<Score>, Serializable { private String name; private int score; // ....... } public class MySortedList<T> extends...implements...,Seri
public class Score implements Comparable<Score>, Serializable {
private String name;
private int score;
// .......
}
public class MySortedList<T> extends...implements...,Serializable {
private ArrayList<T> list;
// ....
}
public class ScoreManager {
private final String FILEPATH;
private final String FILENAME = "highscores.ser";
private MySortedList<Score> scoreList;
public ScoreManager() {
File workingFolder = new File("src\\games\\serialized");
if (!workingFolder.exists()) {
workingFolder.mkdir();
}
FILEPATH = workingFolder.getAbsolutePath();
if ((scoreList = loadScores()) == null) {
scoreList = new MySortedList<Score>();
}
}
public void addScore(Score score) {
scoreList.add(score);
saveScores();
}
public MySortedList<Score> getScoreList() {
return scoreList;
}
private void saveScores() {
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File(FILEPATH, FILENAME)))) {
out.writeObject(scoreList);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private MySortedList<Score> loadScores() {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(FILEPATH, FILENAME)))) {
return (MySortedList<Score>) in.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
公共类分数实现可比较、可序列化{
私有字符串名称;
个人智力得分;
// .......
}
公共类MySortedList扩展…实现…,可序列化{
私有数组列表;
// ....
}
公共班级计分经理{
私有最终字符串文件路径;
私有最终字符串FILENAME=“highscores.ser”;
私人MySortedList记分表;
公共记分经理(){
File workingFolder=新文件(“src\\games\\serialized”);
如果(!workingFolder.exists()){
workingFolder.mkdir();
}
FILEPATH=workingFolder.getAbsolutePath();
如果((scoreList=loadScores())==null){
scoreList=newmySortedList();
}
}
公共无效添加分数(分数){
分数表。添加(分数);
saveScores();
}
public MySortedList getScoreList(){
返回记分表;
}
私有void saveScores(){
try(ObjectOutputStream out=newobjectoutputstream(newfileoutputstream(newfilepath,FILENAME))){
out.writeObject(记分表);
}捕获(ioe异常ioe){
ioe.printStackTrace();
}
}
@抑制警告(“未选中”)
私有MySortedList loadScores(){
try(ObjectInputStream in=newobjectinputstream(newfileinputstream(newfilepath,FILENAME))){
在.readObject()中返回(MySortedList);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
loadScores()方法每次只返回一个空的MySortedList。
然而,程序成功地在正确的位置创建了highscores.ser文件,我绝对没有错误。分数对象已正确添加到MySortedList对象
有什么想法吗?也许值得一提的是,这是Swing中更大程序的一部分。ScoreManager类中的方法在玩家死亡时被调用只有在它可以帮助的情况下,此代码对我有效:
class Score implements Comparable<Score>, Serializable{
private int point;
public Score(int point) {
this.point = point;
}
public int getPoint(){
return point;
}
@Override
public int compareTo(Score o) {
if (o.getPoint() == this.getPoint())
return 0;
return this.point < o.getPoint() ? - 1 : 1;
}
public String toString() {
return "points: " + point;
}
}
class MyList<T> implements Serializable {
private ArrayList<T> list = new ArrayList<>();
public void add(T e){
list.add(e);
}
public void show() {
System.out.println(list);
}
}
public class Main {
File workingFolder;
String FILEPATH;
private final String FILENAME = "highscores.ser";
MyList<Score> list = new MyList<>();
public static void main(String[] args) {
Main main = new Main();
main.createFolder();
main.addItems();
main.saveScores();
MyList<Score> tempList = main.loadScores();
tempList.show();
main.addMoreItems();
main.saveScores();
tempList = main.loadScores();
tempList.show();
}
private void addItems() {
Score sc = new Score(10);
list.add(sc);
}
private void addMoreItems() {
Score sc1 = new Score(20);
list.add(sc1);
Score sc2 = new Score(30);
list.add(sc2);
}
private void createFolder() {
workingFolder = new File("src\\games\\serialized");
if (!workingFolder.exists()) {
workingFolder.mkdir();
}
FILEPATH = workingFolder.getAbsolutePath();
}
private void saveScores() {
System.out.println("before save: " + list);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File(FILEPATH, FILENAME)))) {
out.writeObject(list);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private MyList<Score> loadScores() {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(FILEPATH, FILENAME)))) {
return (MyList<Score>) in.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
类分数实现可比较、可序列化{
私人积分点;
公众分数(整数分){
这个点=点;
}
公共int getPoint(){
返回点;
}
@凌驾
公共整数比较(分数o){
如果(o.getPoint()==this.getPoint())
返回0;
返回this.point
您是否获得堆栈跟踪?如果是,请将其包含在此处。您应该尝试。您是否检查了文件中是否写入了任何内容?编写后,highscores.ser
的大小是多少?是的,它的大小是52字节。您的MySortedList从何扩展而来?所有这些超类都实现了可序列化吗?