2016-01-03 69 views
0

我必須保存並加載國際象棋遊戲。在國際象棋,我有:如何在ObjectInputStream中讀取Object數組時解決InvalidClassException?

public class Chess 
{ 
private Piece[][] pieceArray; 
private Board board; 
private int moves; 
private boolean turn; 
... 
Set's and get's 
} 

我會加載轉,移動和矩陣。現在我只保存和加載矩陣(件[] [])

現在我有這些方法來保存和加載另一個類的遊戲 在這個類中,我有一個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 ;;現場無效的描述符」

我已經實現在片中和國際象棋Serializable接口。 我曾嘗試保存整個國際象棋類,但這樣做,我將不得不在其他8類實現Serializable接口,我試圖避免這一點。 我是否必須單獨閱讀每件作品?

非常感謝。

回答

0

我試過在本地保存保存並且工作正常。問題在於我每次上傳文件時使用的服務器都會損壞文件,給我這個例外。更換服務器完成了這項工作。

1

這是很難確定的問題可能是什麼,因爲沒有設置件接口和它的實現類,但這裏有關於這個問題我的想法:

  1. 我個人將避免存儲陣列或矩陣。我會將這些部分保存在一個容器類中,例如:PieceCollection。
  2. 我看不到你提供的代碼有任何特定的問題(除非chess.getArray()返回別的東西而不是pieceArray)。
  3. 我認爲這裏的主要問題是ObjectInputStream無法區分Piece的各種實現。我建議你嘗試將serialVersionUID添加到實現的Piece類中。欲瞭解更多信息,請參閱以下鏈接:https://docs.oracle.com/javase/7/docs/platform/serialization/spec/class.html
  4. Piece類缺少無參數構造函數。請參閱以下鏈接以獲取更多信息:https://docs.oracle.com/javase/8/docs/api/index.html?java/io/InvalidClassException.html

祝你好運!我希望這個答案能幫助你。

相關問題