2011-04-16 164 views
1

任何人都可以建议哪种方式更好? 以序列化形式存储对象或将filecontent读为String并构造对象。序列化与字符串格式

简单地说,
1.我在我的文件存储中有这样的字符串(str,str1,str2,str3,....)。 读取此文件字符串并构造java对象(例如,基于逗号分隔创建Linkedlist obj)。

2.使用序列化从文件存储中检索链接列表obj。

从文件存储读取序列化对象或从字符串构造obj。 哪一个是最好的方法?

我参考这里的链接列表仅供参考。 它可能是不同的,从字符串我必须构造一些JSONObject,JsonArray格式... JSON不是序列化的obj,我会做一些其他的方式,使序列化。

对于一个最好的冗长字符串,序列化或构造字符串的obj?

所有的事情都与Java有关

请咨询我

问候
S.Chinna

回答

2

使用文本格式的好处是,你可以阅读和简单的维护数据文本编辑器。

使用像对象序列化这样的二进制格式的优点是您不必担心分隔符,例如如果哪一个字符串包含,

无论哪种方法,你认为可能是足够有效的(虽然我会使用ArrayList)

编辑:如果你有多个字符串一个更好的办法可能是把它们放在一个分隔线。这样你就不用担心,,并且可以更容易地读取/编辑/版本文件。

List<String> list = FileUtils.readLines(file); 

正如你所看到的,你将能够在一行中读取整个文件。

+3

此外,在文本格式的文件可以被所有的版本控制系统版本,所以你可以存放东西如源代码库中的测试用例,并随时记录对它​​们的更改。二进制序列化的对象不可能是有效地进行版本控制(如,你不仅能够存储,但检查的差异)的任何版本控制系统! – 2011-04-16 08:42:16

0

这取决于你必须存储的对象的复杂性。如果它们很简单,或者如果您有时间为您的对象编写自己的Writer和Reader,我总是会使用自定义文本格式,因为它们是最容易调试的。

如果您有一台理解文本命令的服务器,您甚至可以使用putty或telnet连接并测试您的服务器!

但是,如果你必须运输复杂的对象结构,甚至可能在开发过程中改变,我肯定会采用某种形式的序列化。请注意,这里默认的序列化不是通信协议的好选择,因为它们在重复定义类时会产生大量开销。如果您希望某些API可以与类中的Java构建兼容,那么最好使用JBossSerialization;如果您不必传输很多二进制数据,则可以使用JSON。

0

的Java ObjectStream系列化的优点是:

  • 你必须最少的代码编写,和最小的思维设计你的序列化格式时做。
  • 与对象的复杂(图结构)网络处理是简单的。
  • 最终的结果应该是类型安全的(假设你没有实现自己的自定义读/写对象的方法等)无缺陷的

的Java序列化ObjectStream的主要缺点是它面对你已经序列化的类的变化是脆弱的。处理这可能是困难的。 (相比之下,手工解析文本格式在很大程度上是不受这个问题......和问题比较容易解决。)