首页 > 代码库 > 我的游戏服务器类库 -- 加载配置表
我的游戏服务器类库 -- 加载配置表
GAMMA类库
我在GitHub上面创建了gamma项目,把自己工作(Java游戏服务器编程)中经常用到的代码整理后放了进去。
配置表加载
前一篇文章介绍了如何查找配置表,本篇文章来介绍一下如何把配置表加载到内存。
ConfigLoader
由于配置表可能在文件里,也可能在数据库里,或者其他地方,所以一个合理的设计可能会是这样:
不过我目前的项目是用JSON文件存放配置表的,所以我只设计了FileConfigLoader和JsonConfigLoader两个类。
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更详细的说明请看这篇文章。
我的游戏服务器类库 -- 加载配置表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。