代码之家  ›  专栏  ›  技术社区  ›  bmdhacks

以独立于语言的二进制格式序列化数据的最佳方法是什么?

  •  15
  • bmdhacks  · 技术社区  · 16 年前

    我正在研究一种通过套接字或共享内存以独立于语言的机制传递序列化数据的机制。我不愿意使用XML,因为这些数据将非常结构化,编码/解码速度至关重要。拥有一个良好的C API并获得充分的许可是很重要的,但是理想情况下应该有对大量其他语言的支持。我看过 google's protocol buffers ASN.1 . 我走对了吗?有更好的吗?我应该实现我自己的打包结构,而不是寻找某种标准吗?

    10 回复  |  直到 11 年前
        1
  •  11
  •   Greg Hewgill    16 年前

    考虑到你的要求,我会使用谷歌协议缓冲区。听起来它非常适合您的应用程序。

        2
  •  3
  •   Hans van Eck    16 年前

    你可以考虑xdr。它有一个 RFC . 我用过它,从来没有性能问题。它曾在onc-rpc中使用,并附带了一个名为rpcgen的工具。当您只想序列化数据时,也很容易自己创建一个生成器(这是我为了可移植性而做的,花了我半天时间)。 有一个开放源代码C实现,但它可能已经在系统库中,所以您不需要这些源代码。

    ASN.1在我看来总是有点巴洛克风格,但根据您的实际需要可能更合适,因为XDR有一些限制。

        3
  •  3
  •   bmdhacks    16 年前

    只是想把ASN.1加入到这个组合中。ASN.1是一种格式标准,但大多数语言都有库,C接口通过 asn1c C interface for protocol buffers .

        4
  •  2
  •   SchizoDuckie    16 年前

    JSON真的是我最喜欢的这类东西。不过,我以前对它中的二进制代码没有经验。如果您打算使用JSON,请发布您的结果!

        5
  •  2
  •   bmdhacks    16 年前

    Thrift 是Facebook创建的二进制格式。 Here's a comparison 使用谷歌协议缓冲区。

        6
  •  1
  •   Mauricio Scheffer    16 年前

    退房 Hessian

        7
  •  1
  •   PhiLho    16 年前

    也有 Binary XML 但似乎还没有稳定下来。我链接到的文章给出了一系列可能感兴趣的链接。

        8
  •  1
  •   bmdhacks    16 年前

    另一个选择是 SNAC/TLV 这是美国在线在其OSCAR/AIM协议中使用的。

        9
  •  1
  •   Joel Lucsy    16 年前

    也签出 Muscle . 虽然它做了很多,但它序列化为二进制格式。

        10
  •  0
  •   anish    11 年前

    你不需要考虑什么

    1. Storage
    2. Encoding Style (1 byte 2 byte)
    3. TLV standards
    

    ASN.1解析器有利于二进制表示。ASN.1是一种成熟的技术,广泛应用于ITU-T内部和外部。许多软件供应商都支持这种表示法。