0

我正在使用JSI (Java Spatial Index, RTree) 来实现 2D 空间搜索。我想将树保存到文件中,该文件java.io.NotSerializableException使用下面的代码触发。

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;
        }
    }
}

如何序列化这个 3rd 方类以便我可以读/写它?谢谢。

4

3 回答 3

1

由于com.infomatiq.jsi.rtree.RTree没有实现Serializable,您不能使用 Java 序列化来保持其对象的状态。您可以使用其他框架进行序列化,例如这里的框架。

于 2013-04-15T07:55:45.233 回答
1

由于 RTree 没有实现 Serializable,因此您不能对其使用 Java 序列化。

于 2013-04-15T07:39:37.883 回答
-1

尝试扩展它,使扩展类可序列化。然后你应该能够写入文件。

于 2013-04-15T07:38:25.587 回答