首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ObjectOutputStream保存HashMap

使用ObjectOutputStream保存HashMap
EN

Stack Overflow用户
提问于 2012-08-10 15:58:38
回答 6查看 7.2K关注 0票数 3

为了保存隐形传送点,我有一个HashMap

代码语言:javascript
复制
public HashMap<Player, Location> mapHomes = new HashMap<>();

它的访问方式如下:

代码语言:javascript
复制
if(cmd.getName().equalsIgnoreCase("sethome")){
    Location loc = player.getLocation();
    mapHomes.put(player, loc);
    sender.sendMessage("Home set !");
    return true;
}
if(cmd.getName().equalsIgnoreCase("home")){
    Location loc1 = mapHomes.get(player);
    player.teleport(loc1);
    sender.sendMessage("Teleported to home");
    return true;
}
return false;

由于这些设置应该在重新启动时保留,因此我实现了一个save方法:

代码语言:javascript
复制
public void save(HashMap<Player,Location> mapHome, String path) throws NotSerializableException{
    try{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
        oos.writeObject(mapHome);
        oos.flush();
        oos.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

但它不起作用。它抛出NotSerializableException

我认为主要的问题是PlayerLocation不是可序列化的类型,那么我应该怎么写这个HashMap

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-10 16:05:48

HashMap已经是Serializable了。

问题是map中的对象不是可序列化的,所以您也必须使它们可序列化。

代码语言:javascript
复制
public class SerializedPlayer extends Player implements Serializable {
    public SerializedPlayer() {}
    public SerializedPlayer(Player playerToClone) {
        this.setField1(playerToClone.getField1());
        // Set all the fields
    }
}

添加到地图时:

代码语言:javascript
复制
map.put(new SerializedPlayer(player), new SerializedLocation(location));
票数 2
EN

Stack Overflow用户

发布于 2012-08-10 16:10:23

当实例需要有Serializable接口时,会抛出NotSerializableException

代码语言:javascript
复制
class YourClass implements Serializable {
    // ...
}
票数 1
EN

Stack Overflow用户

发布于 2012-08-10 16:02:24

代码语言:javascript
复制
class Player implements Serializable {}

class Location implements Serializable {}

请记住,您只能序列化实现Serializable接口的对象。所以您的PlayerLocation类也必须实现该接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11897593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档