我正在为嵌入式平台编写代码。我有一个通过 IPC 与服务进程通信的客户端库。
我正在用 C++ 开发这个客户端库和服务流程。当我刚接触 C++ 世界时,我正在阅读有关 ABI 的内容。
当我通过 IPC 发送数据时,我已经将其序列化为 uint8_t 字节数组。
但我想将这些数据保留在本地存储中,并在 IPC 失败时重新驱动。我可以将字节缓冲区写入 SQLite,但我不太明白这个决定的利弊。不是关于 SQLite 的使用或接收失败,而是具体要保留什么格式。
如果二进制接口发生变化,即使客户端和接收者进程中的序列化和反序列化例程相同,存储格式是否会出现问题?换句话说,从 ABI 角度来看,在同一应用程序中本地保留并重新读取为字节有效负载是否安全,或者我应该序列化为更常见的格式(例如 JSON)?如果编译器发生更改,是否存在数据库中现有数据的反序列化失败的风险?
保存二进制数据没有问题,只要格式保持稳定,跨不同平台,
int64_t
而不是 long
,因为 long
不可移植。如果你正确地掌握了这三件事,你就可以保存二进制数据,并且它在存储、传输和处理方面比 JSON 之类的数据更有效。
确保在使用版本保存到磁盘时标记结构,即:
V1
,以便将来可以修改格式而不破坏向后兼容性。