序列化与字符串格式

时间:2011-04-16 08:11:23

标签: java

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

简单地说,
1.我的文件库中有一个字符串(str,str1,str2,str3,....)。 读取此文件字符串并构造java对象(根据逗号分隔创建Linkedlist obj)。

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

从filestore读取序列化对象或从string构造obj。 哪一个是最好的方式?

我在这里采取的链接列表只是为了样本。 它可能有所不同,从字符串我必须构造一些JSONObject,JsonArray格式...... JSON不是序列化的obj,我将以其他方式将其作为可序列化。

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

所有事情都与Java相关

请指教我

问候
S.Chinna

4 个答案:

答案 0 :(得分:2)

使用文本格式的优点是您可以在简单的文本编辑器中读取和维护数据。

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

,该怎么办?

你建议的任何一种方法都可能足够有效(尽管我会使用ArrayList)

编辑:如果您有多个字符串,更好的方法可能是将它们分别放在一个单独的行上。这样您就不必担心,,并且可以更轻松地读取/编辑/版本化文件。

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

如您所见,您可以在一行中阅读整个文件。

答案 1 :(得分:0)

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

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

但是如果你必须传输复杂的对象结构,甚至可能在开发过程中发生变化,我肯定会采用某种形式的序列化。请注意,Javas默认序列化不是通信协议的良好候选者,因为它们在一次又一次地定义类时产生了大量开销。如果你想要在类中使用Javas构建的API兼容,那么最好选择JBossSerialization,或者如果你不需要传输很多二进制数据,那么最好使用JSON。

答案 2 :(得分:0)

好吧,如果你关心速度 - 去二进制序列化。如果你想轻松阅读序列化对象 - 去基于字符串(例如json)。这是各种序列化器的性能测试:

http://code.google.com/p/thrift-protobuf-compare/wiki/BenchmarkingV2

答案 3 :(得分:0)

Java ObjectStream序列化的优点是:

  • 您需要编写最少的代码,并且在设计序列化格式时要做的事情很少。
  • 处理复杂(图形结构)的对象网络很简单。
  • 最终结果应该是类型安全且无错误的(假设您没有实现自己的自定义读/写对象方法等)

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