繁体   English   中英

序列化与 toString()

[英]Serialization vs toString()

由于我正在写入/读取文件,我想知道直接发送对象或将它们的表示形式用作文件上的字符串之间是否有任何区别或最佳实践,在我的情况下,我个人认为它更容易处理。

那么我什么时候应该序列化而不是将对象作为字符串写入/读取?

object 的字符串表示形式中通常没有足够的信息用于重新创建它。

Java 序列化“有效”,但不会为您提供人类可读的表示形式,如果您正在寻找的话。

另一种选择是读取/写入对象的 JSON 表示。 Java的JSON序列化/联邦化库有几个比较流行,包括GSon和Jackson。

答案在Object.toString()javadoc中。

返回 object 的字符串表示形式。通常,toString 方法返回一个“文本表示”此 object 的字符串。结果应该是简洁但信息丰富的表示形式,易于人们阅读。

请注意,它说:

  • 简洁的,
  • 翔实的,和
  • 便于一个人阅读。

但它没有说:

  • 完全的,
  • 明确的,或
  • 方便电脑阅读。

序列化是关于生成一个线性(不一定是文本)形式,可以被计算机读取并用于重建原始 object 的 state。

因此,典型的序列化不是特别适合人类阅读(例如 JSON、XML、YAML)或完全不可读(例如 Java Object 序列化,ASN.1)。 但不利的一面是,重建 object 所需的信息都应该以明确的形式存在。

(关于各种序列化、它们的属性和效用,还有很多可以说的。但是,它超出了您问题的 scope。)


这是否会阻止toString()用于序列化数据?

不,它没有。

但如果采用这种方法,则需要仔细编写toString()方法的代码,以确保它们生成的内容完整且明确。 然后你需要写一个相应的方法来解析toString() output 并从中创建一个新的 object 。


...或将它们的表示形式用作文件上的字符串,就我个人而言,我个人认为它更容易处理。

我认为,当您编写更大、更复杂的程序时,您将进入这样一个阶段:编写、测试和维护此类代码既乏味又耗时。

序列化允许您将 object 的 state 转换为 stream 字节,然后可以将其保存到本地磁盘上的文件,通过网络发送到任何其他机器,或保存到数据库。 反序列化允许您反转过程,这意味着将序列化字节 stream 重新转换为 object。 重要的是要知道数字或其他类型不像字符串那样容易写入文件或处理。 但是,不保证它们的初始状态在不被序列化的情况下保持不变。

因此,对于更简单的情况,序列化不一定很重要,例如大学项目,使用字符串很方便。 但是,不建议进行此过程,因为还有其他更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM