码迷,mamicode.com
首页 > 其他好文 > 详细

我的游戏服务器类库 -- 加载配置表

时间:2014-09-30 20:05:59      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:java   服务器   游戏   

GAMMA类库

我在GitHub上面创建了gamma项目,把自己工作(Java游戏服务器编程)中经常用到的代码整理后放了进去。

配置表加载

前一篇文章介绍了如何查找配置表,本篇文章来介绍一下如何把配置表加载到内存。

ConfigLoader

由于配置表可能在文件里,也可能在数据库里,或者其他地方,所以一个合理的设计可能会是这样:

bubuko.com,布布扣

不过我目前的项目是用JSON文件存放配置表的,所以我只设计了FileConfigLoaderJsonConfigLoader两个类。

FileConfigLoader

public abstract class FileConfigLoader {
    
    public <T extends Config> List<T> load(Class<T> cfgClass, File cfgFile, Charset cs) throws IOException {
        return load(cfgClass, new FileInputStream(cfgFile), cs);
    }
    
    public <T extends Config> List<T> load(Class<T> cfgClass, InputStream is, Charset cs) throws IOException {
        try (Reader reader = new InputStreamReader(is, cs)) {
            return load(cfgClass, reader);
        }
    }
    
    public abstract <T extends Config> List<T> load(Class<T> cfgClass, Reader reader) throws IOException;
    
}
FileConfigLoader是个抽象类,有三个方法,分别从Reader、InputStream和File里读取配置。

JsonConfigLoader

public class JsonConfigLoader extends FileConfigLoader {

    private static final Gson GSON = new Gson();
    private static final Type LIST_TYPE = new TypeToken<ArrayList<JsonObject>>(){}.getType();
    
    private final Gson gson;

    public JsonConfigLoader() {
        this(GSON);
    }
    
    public JsonConfigLoader(Gson gson) {
        this.gson = gson;
    }
    
    @Override
    public <T extends Config> List<T> load(Class<T> cfgClass, Reader reader)  {
        ArrayList<JsonObject> jsonObjs = gson.fromJson(reader, LIST_TYPE);
        
        ArrayList<T> cfgs = new ArrayList<>(jsonObjs.size());
        for (JsonObject jsonObj : jsonObjs) {
            cfgs.add(gson.fromJson(jsonObj, cfgClass));
        }
        
        return cfgs;
    }
    
}
JsonConfigLoader是FileConfigLoader的子类,实现了load(Class, Reader)方法。JsonConfigLoader利用GSON库把JSON格式的数据转换成对象,关于GSON更详细的说明请看这篇文章

我的游戏服务器类库 -- 加载配置表

标签:java   服务器   游戏   

原文地址:http://blog.csdn.net/zxhoo/article/details/39697335

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!