我必须保存并加载国际象棋游戏。在国际象棋我有:
public class Chess
{
private Piece[][] pieceArray;
private Board board;
private int moves;
private boolean turn;
...
Set's and get's
}
我必须加载转弯,移动和矩阵。现在我只保存并加载矩阵(Pieces [] [])
现在我有这些方法可以在另一个类中保存和加载游戏 在这个类中,我有一个连接到服务器的FTPClient。
保存游戏:
public boolean saveGame(Chess chess) {
boolean error = false;
try {
File file = new File("game.save");
FileOutputStream fis = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fis);
oos.writeObject(chess.getArray());
oos.close();
// Save that file in the server
FileInputStream fis = new FileInputStream(new File("game.save"));
client.storeFile("game.save", fis);
fis.close();
file.delete();
} catch (IOException e) {
e.printStackTrace();
}
return error;
保存游戏让我没有问题,顺利进行。
现在这是我用来加载游戏的方法,即抛出invalidClassException的方法。
try {
FileInputStream fis = new FileInputStream(new File("game.save"));
ObjectInputStream ois = new ObjectInputStream(fis);
chess.setArray((Piece[][]) ois.readObject());
chess.paintInBoard();
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
每当我尝试阅读matriz时,我得到" java.io.InvalidClassException:[LPiece ;;字段"
的无效描述符我在Piece和Chess中实现了Serializable接口。 我已经尝试保存整个Chess类但是这样做我必须在其他8个类中实现Serializable接口,我试图避免这种情况。 我是否必须单独阅读每件作品?
非常感谢你。
答案 0 :(得分:1)
很难确定问题可能是什么,因为没有提供Piece接口及其实现类,但这里是我对这个问题的看法:
答案 1 :(得分:0)
我尝试在本地保存存储并且它有效。问题是我每次上传时使用的服务器都损坏了文件,给了我这个例外。更改服务器完成了这项工作。