gpt4 book ai didi

java - 发送/序列化对象的最佳实践

转载 作者:行者123 更新时间:2023-12-01 06:33:47 26 4
gpt4 key购买 nike

问题:开发人员创建自己的序列化格式有多常见?具体来说,我使用 java 本质上将对象作为一个巨大的字符串发送,并用标记来分隔变量。

我的逻辑:我选择这个是因为它几乎消除了语言依赖性(忽略java的修改后的UTF-8),而且你也没有对象版本问题,如果你使用java的序列化接收端必须具有完全相同的版本对象的版本,因此在旧版本上运行的客户端将无法接收任何对象数据。代码并不太难看,而且读起来还不错,但我想我的问题是这个实例的最佳实践是什么?这是一个个人项目。

其他已知的选择:好的,我只是在序列化一个对象以通过网络发送它,并且遇到了谷歌 Protocol Buffer 。序列化对象的标准化程度如何?我基本上遇到了三种方法来做到这一点。 (我将在这里讨论 java,因为这就是我这样做的目的)1)使用该语言的(java) native 序列化类 2)使用您自己的方式序列化对象,可能使用字符串和标记 3)使用 Protocol Buffer 或一些其他已知的格式(JSON、XML 等)

根据我收集的信息,序列化时您基本上需要实现 3 个主要目标:1) 速度/效率/尺寸2)语言独立性3)版本接受(旧版本的代码仍然可以接受新版本的部分内容,反之亦然)

大多数大型软件项目都使用 Protocol Buffer 吗?如果您的客户端是资源少得多的移动设备,情况会改变吗?

最佳答案

如果您使用标准格式(JSON、XML,甚至原始缓冲区),那么通过集成点扩展您的应用程序的机会就会多得多。但如果只是内部问题,那就做简单的事情。就我个人而言,我创建了一个专用的持久代理类来表示给定对象的序列化形式。然后使用 writeReplace 和 readResolve 使用任何最有意义的方法序列化该对象(用于在线实时传输的 Java 序列化,用于长期持久性的 xml)。随着类的发展,我可以根据需要创建持久代理的全新实现,向代理添加版本控制等。我相信 Bloch 在《Effective Java》中讨论了这种模式。

至于提出一个纯粹从头开始的线路协议(protocol),它实际上取决于性能对应用程序的重要性。与大多数事情一样,您越多地利用标准库/协议(protocol),您就能越快地获得新代码。当我看到大量涉及序列化等的代码时......我通常认为它是一种代码味道,并非常密切地关注它是否合理。只是我的 0.02 美元。

PS - 有人发布了有关图表的问题...这实际上是我故意避免标准序列化的一个领域。 Java 序列化复杂图形的能力并不是很好 - 如果图形非常复杂,您最终会遇到堆栈溢出问题(哈)。在这些情况下,持久代理非常非常重要。

关于java - 发送/序列化对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com