gpt4 book ai didi

c++ - (De/)序列化作为 C++ 中基于文件的数据交换的接口(interface)

转载 作者:行者123 更新时间:2023-11-28 07:05:27 26 4
gpt4 key购买 nike

我正在尝试找到对正确使用序列化进行数据传输的一些一般理解。假设我们有两个二进制文件。每个二进制文件都有一些适合其内部使用模型的数据内部表示,并且表示形式因二进制文件而异。现在我们想将一些数据从一个二进制文件传递到另一个二进制文件。

两种选择:

  • 使用具有序列化/反序列化方法的辅助类。该类针对存储进行了优化,并将所有文件表示逻辑保存在一个位置。
  • 分别从每个二进制文件的内部结构中使用标准化格式的自定义读/写。这可以避免创建辅助类实例和双重复制的开销。

问:

  • 为了理解这两种方法在特定情况下的适用性,我需要做出哪些推测?
  • 是否有一种模式可以混合解决方案,同时保留两者的优点?

最佳答案

实际情况是,您所建议的两种方法几乎没有什么区别。但是您需要考虑许多重要的实现权衡。包括:

  1. 序列化格式应该是人类可读的还是二进制的。 CSV、XML、JSON、YAML 可能是人类可读的。二进制可以是 ASN.1、自定义格式、序列化库的输出。
  2. 对于 future 的变化,格式的可扩展性应该如何。您需要文件格式版本号吗?您应该允许任意字段吗?
  3. 它是否需要基于标准,将来其他应用程序是否也会参与此信息交换。
  4. 交换需要有多安全。是否应使用 SSL/TLS,是否应加密数据等。
  5. 交换所需的可靠性和/或性能如何。 XML 附带 XSD 用于验证数据,但解析速度不如其他格式快。如果您需要可靠的交付,您应该使用消息队列(ActiveMQ、MSMQ 等)吗?
  6. 二进制文件将如何共享数据:监视文件夹、内存映射文件、命名管道、套接字、消息队列、boost::asio、Thrift、XML RPC、HTTP、SOAP、REST 等

无论您是使用 boost::serialization 或 google protocol buffers 序列化一个类,还是您说编写手动 XML DOM 代码来读取和写入数据,都是您设计中更重要的考虑因素中的一个小细节。但是,根据我的经验,如果您可以灵活地使用自定义数据格式,那么与自行开发的解决方案相比,使用序列化代码更易于维护、性能更好并且质量问题更少。

关于c++ - (De/)序列化作为 C++ 中基于文件的数据交换的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21825787/

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