[英]Can't serialize with Jackson Json class fields if it extends ArrayList
[英]Can't serialize an ArrayList
這是序列化向量的后續步驟
我正在嘗試為我正在開發的游戲實現加載和保存。
我想保存一個Maze
,其中除其他屬性外,還包含Entity
的ArrayList
。
實體是龍,英雄和物品的超類。 所有這三種類型都可以一次包含在向量中。
使用“自動”序列化機制(將implements Serializable
可implements Serializable
添加到Maze
)可保存除ArrayList
所有屬性。
為什么會這樣?
為了完整起見,下面是我的代碼。
package logic;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public final class LoadAndSave {
public static final transient boolean available = false;
public static final boolean serialize(Object obj) {
// Write to disk with FileOutputStream
FileOutputStream saveFile;
try {
saveFile = new FileOutputStream("game.sav");
} catch (FileNotFoundException e) {
return false;
}
// Write object with ObjectOutputStream
ObjectOutputStream objOut;
try {
objOut = new ObjectOutputStream(saveFile);
} catch (IOException e) {
//
return false;
}
// Write object out to disk
try {
objOut.writeObject(obj);
} catch (IOException e) {
return false;
}
return true;
}
public static final Object load() {
FileInputStream fileIn;
try {
fileIn = new FileInputStream("game.sav");
} catch (FileNotFoundException e1) {
return null;
}
// Read object using ObjectInputStream
ObjectInputStream objIn;
try {
objIn = new ObjectInputStream(fileIn);
} catch (IOException e) {
return null;
}
// Read an object
Object obj;
try {
obj = objIn.readObject();
} catch (IOException e) {
return null;
} catch (ClassNotFoundException e) {
return null;
}
return obj;
}
}
Entity
序列化嗎? (您提到過,迷宮只是可序列化的)。
並且請確保該列表未定義為瞬時或靜態的 ,否則序列化機制將跳過該列表。
您需要確保關閉流。 您的load()代碼可以簡化為如下所示:
ObjectInputStream objIn = null;
try {
objIn = new ObjectInputStream(new FileInputStream("game.sav"));
return objIn.readObject();
} catch (Exception exception) {
// Deal with errors
return null;
} finally {
if (objIn != null) {
try {
objIn.close();
} catch (Exception exception) {}
}
}
serialise()可以類似的方式更改。
我按照以下假設檢查了您的代碼:
class Entity implements Serializable {}
和:
private char[][] mazeWalls = new char[0][0];
private Vector<Entity> entities = new Vector<Entity>();
...並且完美地工作,可以序列化和反序列化空的Entity
對象...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.