Java的“设置对象”,序列化/反序列化

3

(这段代码是针对安卓的 实际上,我需要代码能够在安卓和Java SE之间通用。)

我想要一个“设置”类,包含各种游戏设置,例如

public int map_size;
public String server_name;

数据需要经常访问(因此成员而不是键值映射),并且有时需要以某种标准方式进行序列化/反序列化(主要是通过网络发送)。

我想能够

  1. 将对象序列化并反序列化为XML或JSON,而无需明确编写每个成员的代码(但仍具有一定程度的格式控制)。

  2. 定义关于每个成员的一些(常数)元数据(默认值、GUI名称、XML标识符等),以一种允许在源代码中轻松修改的方式进行定义(我想能够添加新的元属性,定义其默认值,并且不必到处指定它)。

1可以通过使用反射实现。对于2,我认为Java注释类成员非常适合:

@Setting(id = "server_name", name = "Server title", default = "Server0")
public String server_name;

但是看起来(用户定义的)注释在Android上还没有生效 - 使用它们的代码会导致编译器崩溃...
哪种方式是存储关于设置的元数据最简单的方法(或者另一种处理所有这些的方法)?
- 在某个外部XML文件中存储有关设置的信息? - 将其存储在Java数据结构中,并使用代码定义内容?以这种方式定义数据似乎非常笨重,特别是与注释的关键字参数相比较。 - ?
3个回答

3

提供信息,看起来Jackson在0.9.7版本中已经修复与Android的兼容性问题。

虽然我同意Daniel Lew的观点,即在Android客户端中使用内置的Android偏好设置是最佳解决方案。对于JavaSE客户端,Properties类是存储偏好设置的好方式。还有一个JavaSE偏好设置包,但它可能比您需要的功能更多。


Jackson工作了,但性能方面存在一些问题(特别是在第一次启动模块时-我们通过在程序开始时启动一个单独的线程来“预热”解决了这个问题)。 - hmp

1

你不使用 内置的 Android 偏好设置 有什么特殊的原因吗?只要所有的游戏设置都是基本类型(或字符串),那么这可能是存储偏好设置最简单的方式。此外,如果您最终需要创建一个设置页面,它与 PreferenceActivity 很好地同步(ApiDemos 中有一些 Preference 示例)。


非常抱歉未能澄清,但我希望代码的这一部分具有可移植性(并且我希望设置能够快速访问,这就是为什么我更喜欢将它们作为类成员)。无论如何,感谢你的提示,也许将游戏设置与首选项 API 进行同步会很值得一试。 - hmp

1

虽然我不确定它们在Android上的表现如何,但XStreamJackson提供了高度可定制的Java对象的XML或JSON(反)序列化。请注意,XStream支持XML和JSON输出,而Jackson仅支持JSON。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接