我正在使用JSI(Java Spatial Index,RTree)來實現2D空間搜索。我想將樹保存到文件中,這會使用下面的代碼觸發java.io.NotSerializableException
。Java在文件中寫入/讀取不可序列化的對象
public class GeographicIndexer {
private static final Logger log = LoggerFactory.getLogger(GeographicIndexer.class);
public SpatialIndex spatialIndex = null;
public void init() {
this.spatialIndex = new RTree();
this.spatialIndex.init(null);
}
public void add(float x1, float y1, float x2, float y2, int id) {
Rectangle rect = new Rectangle(x1, y1, x2, y2);
this.spatialIndex.add(rect, id);
}
public void add(float x, float y, int id) {
this.add(x, y, x, y, id);
}
public void saveIndex(String indexStorePath) {
try {
OutputStream file = new FileOutputStream(indexStorePath);
OutputStream buffer = new BufferedOutputStream(file);
ObjectOutput output = new ObjectOutputStream(buffer);
try {
output.writeObject(this.spatialIndex);
} finally {
output.close();
}
} catch(IOException e) {
log.error("Fail to write geographic index");
e.printStackTrace();
}
}
public GeographicIndexer loadIndex(String indexStorePath) {
try {
InputStream file = new FileInputStream(indexStorePath);
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream(buffer);
try {
this.spatialIndex = (SpatialIndex)input.readObject();
} catch (ClassNotFoundException e) {
log.error("Fail to read geographic index");
} finally {
input.close();
}
return this;
} catch(IOException e) {
log.error("Fail to read geographic index");
return this;
}
}
}
如何序列化此第三方類,以便我可以讀/寫它? 謝謝。
可能該類沒有實現'Serializable'! – NINCOMPOOP
你能在'output.writeObject(this.spatialIndex);'後面捕獲異常並打印完整的跟蹤嗎?看起來像'try'後面是'finally' – sanbhat
@noob它沒有。這是否意味着我無法將其保存到文件? –