【问题标题】:Incremental interchange format增量交换格式
【发布时间】:2009-04-22 10:57:58
【问题描述】:

我需要一种格式来将数据从程序 A 传输到程序 B,显然我更喜欢使用标准格式。从表面上看,XML 非常适合这项工作,或者可能是 JSON。

美中不足的是,我需要增量格式:程序 A 不时将数据附加到文件中,然后程序 B 在准备好时将全部内容删除。根据我的阅读,XML 和 JSON 都无法做到这一点,因为它们都需要文件中的一个顶级元素。

我有什么遗漏的吗?

澄清:

我需要 XML 提供的那种结构,而 CSV 不需要。 (好吧,我可以制作 CSV 的突变变体,其他任何东西都无法读取,但这就是我要避免的。)

A 不知道何时完成(取决于用户操作、网络连接的可用性和其他此类不可预测的变量),因此 A 不能说“现在我将写入最后一个结束标记并移交给 B”因为 A 可能会在 B 之前再次被调用。

【问题讨论】:

    标签: xml json


    【解决方案1】:

    所以A总是需要写一个格式良好的文件,以便B可以随时读取。

    如果您使用 XML(这似乎很合适),您将始终必须编写格式良好的文档(例如,包含一个根节点和其中的子节点)。所以你必须在你的进程中维护一个 DOM 对象。根据内存消耗,这可能没问题。

    A 可以在有更新时写入。这里的问题是写入文件将花费有限的时间,并且您不希望 B 读取部分写入的文件。此处需要某种形式的文件完整信号(使用临时文件作为信号量、重命名等)

    【讨论】:

      【解决方案2】:

      CSV 怎么样?易于编写 - 如果您知道格式并且不需要额外的元信息,则易于解析。

      【讨论】:

      • 我不会签署“易于解析”,因为大多数应用程序对 CSV 究竟是什么的看法略有不同(想想分隔符和转义符,以及转义符的转义符)。当然,除非您控制这两个应用程序并且只使用“您的”CSV 格式。
      • 你说得对。我假设控制这两个应用程序。然后很容易解析,因为您指定了格式。
      【解决方案3】:

      如果我的理解正确,工作流程如下:

      • 在一段时间内,A 正在构建数据以放入文件中
      • 一旦准备好,B 就会消耗掉整个东西。

      在这种情况下,XML 和 JSON 都很好,因为有一个不同的点 A 正在工作,而 B 在文件被处理之前不会开始使用它(而不是像一个始终打开的流,不断地馈送数据)。

      在 .NET 之类的东西中,您可以创建一个带有根元素的 XmlDocument,然后继续向其中添加节点,直到完成为止。

      【讨论】:

        猜你喜欢
        • 2013-12-17
        • 2012-06-08
        • 2013-05-05
        • 2023-01-17
        • 2017-01-02
        • 2012-11-13
        • 2013-11-20
        • 1970-01-01
        • 2011-03-12
        相关资源
        最近更新 更多