在過去的幾天裏,我一直在嘗試使用序列化來保存我的遊戲狀態。我對序列化並不熟悉,所以我一直在嘗試將我的播放器數據序列化爲一個名爲「Player.ser」的文件。現在,當玩家被反序列化時,結果是玩家爲空。當我運行序列化代碼時,它成功創建了文件,並且不會拋出任何異常,當我反序列化它時,它也不會拋出任何異常。就在我寫文件之前,我更改了播放器的名稱,所以我知道它已經保存了,但是當我反序列化它並獲取裝入的播放器名稱時,它將返回null。玩家的課程沒有正確序列化
這是我的播放器代碼:
package entity;
import item.Item;
import java.io.Serializable;
import java.util.Random;
import quests.Quest;
import map.tiles.VoidTile;
public class EntityPlayer extends entity implements Serializable{
public EntityPlayer(int x, int y, String name, int width, int height, int[] pxArry){
super(x,y);
this.direction = 0;
this.name = name;
this.width = width;
this.height = height;
this.pxArry = pxArry;
for(int i = 0; i < pxArry.length; i++)
for(int i2 = 0; i2 < pxArry[i].length; i2++){
this.pxArry[i][i2] = pxArry[i][i2];
}
this.inventory = new Item[0];
this.createBasicStatsArry();
}
Item[] inventory;
Quest[] activeQuests, completedQuests;
Status[] statusArry[];
@Override
public String toString(){
return "EntityPlayer [x=" + this.x +", y="+ this.y+", name="+ this.name+ ", width="+ this.width+", height="+this.height+", pxArry="+ this.pxArry+"]";
}
}
這裏是運行我的串行代碼當玩家存儲遊戲:
try {
EntityPlayer tp= game.getPlayer();
tp.setName("oldPlayer");
ObjectOutputStream obs = new ObjectOutputStream(new FileOutputStream(new File("Player.ser")));
obs.writeObject(tp);
obs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
這裏是我的解串器代碼:
if(new File("Player.ser").exists()){
try {
ObjectInputStream oi = new ObjectInputStream(new FileInputStream("Player.ser"));
try {
EntityPlayer player = (EntityPlayer) oi.readObject();
System.out.println("My name is: "+player.getName());
oi.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
playerBlaze = new EntityPlayer(0,0,"Player",32,34,new int[][]{ar.makeImg("entityBlaze.png", 32, 34),ar.makeImg("entityClay.png", 32, 34)}, new int[]{1,100,100,5,5,5,5}, new int[]{1,100,100,5,5,5,5});
player = playerBlaze;
System.out.println("My name is "+player.getName());
}
正如我前面所說,我是使用序列化的新手,所以知道這段代碼有什麼問題會很有幫助。另外如果你知道任何資源來學習序列化或只是一般的java,我很想聽聽他們。
簡化並解決。嘗試使用一個簡單的類來進行序列化,該類只有一個名稱字符串,然後看看會發生什麼。如果它運作良好,請繼續加入課程,直到你得到你想要的。如果沒有,那麼你可以通過發佈很小的代碼,爲我們編譯,爲我們運行並向我們展示你的問題 - 一個[mcve]來問一個更好的問題。 –