首页 / JAVA / Java中的手动对象序列化
Java中的手动对象序列化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的手动对象序列化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1776字,纯文字阅读大概需要3分钟。
内容图文
![Java中的手动对象序列化](/upload/InfoBanner/zyjiaocheng/798/a475ce9d5ee64181ae8fef9d3e98e7b2.jpg)
我有一个自定义的INIFile类,我编写了读/写包含标题下字段的INI文件.我有几个类,我想使用这个类序列化,但我有点困惑,最好的方法去做.我考虑了两种可能的方法.
方法1:定义像ObjectPersistent这样的接口,强制执行两个方法,如下所示:
public interface ObjectPersistent
{
public void save(INIFile ini);
public void load(INIFile ini);
}
然后,每个类负责使用INIFile类将所有属性输出到文件.
方法2:通过getter / setter公开需要序列化的类的所有属性,以便可以在一个集中的位置处理保存,如下所示:
public void savePlayer(Player p)
{
INIFile i = new INIFile(p.getName() + ".ini");
i.put("general", "name", p.getName());
i.put("stats", "str", p.getSTR());
// and so on
}
方法1的最佳部分是并非所有属性都需要暴露,因此封装保持牢固.方法1的不好之处在于,技术上保存并不是玩家会“做”的事情.它还通过传递给方法的ini对象将我绑定到平面文件,因此稍后切换到关系数据库将是一个巨大的痛苦.
方法2的最佳部分是所有I / O都集中在一个位置,实际的保存过程对您完全隐藏.它可以保存到平面文件或数据库.方法2的不好之处在于我必须完全公开类内部成员,以便集中式序列化程序可以从类中获取所有数据.
我想尽量保持这个简单.我更喜欢在不使用框架的情况下手动执行此操作.我也对使用Java提供的内置序列化不感兴趣.这里有什么我想念的吗?关于什么样的模式最适合这个的任何建议,我将不胜感激.谢谢.
解决方法:
由于您不希望(出于某种原因)使用Java序列化,因此可以使用XML序列化.最简单的方法是通过XStream:
XStream is a simple library to serialize objects to XML and back again.
如果您确定不想使用任何序列化框架,那么您当然可以使用反射.重要的是:
> getClass().getDeclaredFields()返回类的所有字段 – public和private
> field.setAccessible(true) – 通过反射访问私有(或受保护)字段
> Modifier.isTransient(field.getModifiers())告诉您该字段是否已使用transient关键字标记 – 即不符合序列化条件.
>嵌套对象结构可以用点表示法表示 – 例如team.coach.name.
所有序列化库都使用反射(或introspection)来实现其目标.
内容总结
以上是互联网集市为您收集整理的Java中的手动对象序列化全部内容,希望文章能够帮你解决Java中的手动对象序列化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。