Socket编程 - 序列化

4

我已经阅读了Beej指南以及我在互联网上找到的许多其他资源,但我感觉在序列化和反序列化方面缺少了一些东西。我可以通过硬编码为服务器和客户端发送/接收定义结构来解决问题,但我想知道是否有任何资源可以帮助我更有效地序列化或者通用一点,这将帮助我在其他程序中重复使用一些序列化代码,而不是为每个要传递的数据结构编写定制的序列化函数。


2
《编程实践》一书提供了一个不错的通用二进制序列化函数,适用于C语言。虽然这是一本纸质书,但相关代码可能已经在网络上流传。 - Fred Foo
这本书不贵,所以我会订购并阅读它。我也会研究一下Google Protobuf。感谢你的指引(咯咯笑)。;) - ciphermagi
我在使用nanopb将protobuf用于C代码时获得了一些很好的经验。我们正在生产中使用它。 - πάντα ῥεῖ
请检查 Binn 格式。在我测试过的格式中,它是C语言中最容易使用的。 - Bernardo Ramos
1个回答

1

Google Protobuf可能对您有用,特别是如果您想考虑在多种编程语言中实现跨平台应用程序。

Protobuf已经实现了序列化,因此您可以使用它。

由于上面的链接是针对c ++的,this是c的替代品。 但是也有许多其他语言的实现,如Python、PHP、Java等! 另一个C Protobuf库是nanoPB,感谢πάντα ῥεῖ指出这一点。它似乎很稳定。

另一种方法是使用另一个序列化库来对数据进行序列化和反序列化。

最后一种可能的方法是自己实现序列化,就像在这个SO问题中描述的那样。


经过调查,这种语言非常专门用于C++,完全与主题无关。 - ciphermagi
@ciphermagi 这很令人惊讶,因为当你在谷歌上搜索“C语言的protobuf”时,第一个链接是:code.google.com/p/protobuf-c/ 希望这能帮到你。 - Theolodis
1
你的意思是那个项目页面明确说明它不稳定,与大多数Protobuf不兼容,没有扩展功能,实际上在大部分情况下甚至没有实现Protobuf设计的过程吗? - ciphermagi
@ciphermagi,我没有看到你获取信息的来源。让我引用一下:状态:大部分代码是稳定的,群组未实现 - 他们可能永远不会被实现(因为它们已经被弃用)。所以从我的角度来看,这完全可用。关于扩展,如果你真的需要它们,你可以自己实现,因为代码是开源的。 - Theolodis
1
我曾用nanopb在C代码中使用protobuf并积累了一些很好的经验。我们正在生产环境中使用它。 - πάντα ῥεῖ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接