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);'다음에 예외를 catch하고 전체 추적을 인쇄 할 수 있습니까? 'try'다음에 'finally'가 표시됩니다. – sanbhat
@noob 그렇지 않습니다. 파일로 저장할 수 없다는 의미입니까? –