我可以实现在 java(geotools) 中存在并编译的类的 Serializable 吗?

Posted

技术标签:

【中文标题】我可以实现在 java(geotools) 中存在并编译的类的 Serializable 吗?【英文标题】:Can I implement Serializable which exists and compiled class in java(geotools)? 【发布时间】:2020-08-05 19:49:32 【问题描述】:

我用 GeoTools 编写了一个读取和显示 GIS 形状文件的程序,我想保存我的程序的状态。

主类.java

        Project myproject=new Project();
        myproject.mapLayers=this.frame.getMapContext().getLayers();

项目.java

import org.geotools.map.MapLayer;    
public class Project implements Serializable
    public String name;
    public  MapLayer[] mapLayers;

    public void save(String projectname)
        ReadWriteObject.writeObject(projectname+".gpr",this);
    

    public Project load(String projectname)
        return (Project)ReadWriteObject.readObject(projectname);
    

读写对象

public class ReadWriteObject 

    public static boolean writeObject(String filename, Object obj)
        try 
            FileOutputStream f = new FileOutputStream(new File(filename));
            ObjectOutputStream o = new ObjectOutputStream(f);

            // Write objects to file
            o.writeObject(obj);
            o.close();
            f.close();
         catch (FileNotFoundException e) 
            System.out.println("File not found");
            return false;
         catch (IOException e) 
            System.out.println("Error initializing stream");
            return false;

        

        return true;
    

发生错误DefaultMapLayer 不是Serializable。 如何在 java 中保存我的程序状态?

【问题讨论】:

【参考方案1】:

我会简单地以某种格式(XML、JSON)写出进入地图的图层、样式,然后再次读回以重新创建地图。您实际上不需要存储程序的整个状态。

或者,您可以将propose a change 添加到源代码以将Serialize 添加到类。理想情况下,您应该找到所有需要序列化且当前未实现 Serialize 的必要类并提交单个拉取请求。

【讨论】:

以上是关于我可以实现在 java(geotools) 中存在并编译的类的 Serializable 吗?的主要内容,如果未能解决你的问题,请参考以下文章

GeoTools介绍环境安装读取shp文件并显示

java 利用工具包Geotools实现不同坐标系之间坐标转换

java 利用工具包Geotools实现不同坐标系之间坐标转换

GeoTools快速入门

GeoTools快速入门

Geotools 谷歌地图 java ee Web 应用程序