跨平台和语言(反)序列化

2023-11-23

我正在寻找一种以最方便的方式序列化一堆 C++ 结构的方法,以便序列化可以跨 C++ 和 Java(至少)以及跨 32 位/64 位、大/小端平台移植。要序列化的结构仅包含数据,即它们是没有状态或行为的纯数据对象。

我们的想法是,我们将结构序列化为一个八位字节 blob,我们可以“一般地”将其存储在数据库中,并在以后读出。因此,避免在结构发生更改时更改数据库,也避免将每个数据成员分配给一个字段 - 即,我们只希望一个表将所有内容“一般”保存为二进制 blob。这应该会减少开发人员的工作量,并且在结构发生变化时需要更少的更改。

我研究过 boost.serialize 但不认为有办法实现与 Java 的兼容性。 Java 中继承 Serialized 也是如此。

如果有一种方法可以从 IDL 文件开始,那将是最好的,因为我们已经有了描述结构的 IDL 文件。

提前干杯!


我偶然发现这里,有一个非常相似的问题。 6 年后,这可能对你没用,但希望对其他人有用。

有很多替代方案,不幸的是没有明显的赢家(尽管有人可能会认为 JSON 是明显的赢家)。甚至谷歌也发布了多种竞争技术(所有这些技术显然都在内部使用):

  • 平面缓冲区: 这个似乎符合原问题的要求,有有趣的基准 and 支持某种形式的 IDL(我个人对IDL不太熟悉)
  • 协议缓冲区: 前面提到过。
  • XFJSON:比 JSON 小 5%-12%。

不要忘记其他答案中发布的替代方案。这里还有一些:

  • YAML: JSON 减去所有双引号,但使用缩进代替。它更易于人类阅读,但效率可能较低,尤其是当它变得更大时。
  • BSON(二进制 JSON)
  • 消息包(另一个压缩的 JSON)

由于有如此多的变体,JSON 在简单/方便和跨平台访问方面显然是赢家。随着 JavaScript 的兴起,它在过去几年中变得更加流行。很多人可能会使用它作为事实上的解决方案,而没有考虑太多(这就是我最初所做的:P)。

但是,如果大小成为问题,但您希望保持简单而不使用更高级的库之一,则可以使用以下命令压缩 JSONzlib(这就是我现在正在做的),或其他一些跨平台算法(但那是另一个主题)。

要加速 C++ 中的 JSON 处理,您还可以使用快速JSON.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨平台和语言(反)序列化 的相关文章

  • 如何创建序列化对象集 C#

    有多种类型 在特殊情况下可以以不同的方式配置 如何将它们序列化 Serializable XmlRoot RootXml Namespace public class RootXml object schemaVersion XmlElem
  • 使用混淆的 Proto-buf 序列化

    我正在寻找一些有关使用带有混淆功能的 proto buf 网络 Dotfuscator 时发生的情况的指导 该项目的一半是 DLL 另一半是其他地方的 EXE 它们使用 proto buf NET 完美地交换数据 直到我混淆了 DLL 此时
  • 如何测试哈希函数?

    有没有办法测试哈希函数的质量 我希望在哈希表中使用时具有良好的分布 如果这可以在单元测试中验证 那就太好了 EDIT 为了澄清 我的问题是我已经使用了longJava 中的值的方式是第一个 32 位编码一个 ID 第二个 32 位编码另一个
  • 为什么函数不可序列化?

    背景 在 Meteor 文档中Meteor call http docs meteor com full meteor call 它写道 如果您将回调函数作为最后一个参数 它不能作为该方法的参数 因为函数不可序列化 我跑过类似的东西Mete
  • 对象序列化 - 从 C# 或 java 到 Objective C

    服务器端 C 或 java 客户端 Objective C 我需要一种在 C java 中序列化对象并在 Objective C 中反序列化它的方法 我是 Objective C 的新手 我想知道从哪里可以获得有关此问题的信息 Thanks
  • 空合并运算符分配给 self

    我目前在 Unity 中设置了两个脚本来处理一些 UI 音频 一个是管理器 另一个是为特定 UI 元素播放声音 我所拥有的简化版本是这样的 public class AudioUIManager MonoBehaviour Only one
  • C# WPF 将粘贴在 richtextbox 中的 BitmapImage 转换为二进制

    我有一个 Richtextbox 我计划将其保存到数据库中 该数据库可以加载回同一个 Richtextbox 中 我已经让它工作了 这样我就可以将流程文档保存为 DataFormats XamlPackage 这可以保存图像 但问题是文本不
  • 有没有某种方法可以为嵌套在 Jackson 的可选类型中的类型指定自定义反序列化器?

    我有一些类型需要用它们自己的特殊反序列化器和序列化器来处理 但是当类型嵌套在可选中时 如何指示 Jackson 使用它们 我正在使用 JDK8Module 它适用于任何不需要任何特殊处理的类型 当 JsonDeserialize和 Json
  • 保存 ArrayList 内容的最佳方法是什么?

    我想保存一个 ArrayList 以使其持久化 内容可能会改变 在 android 中解决这个问题的最佳方法是什么 你的问题类似于问 我有这袋东西 我应该把这些东西转移到盒子 桶 桶还是垃圾箱里 如果不知道 东西 是什么 我们就无法轻易回答
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • 将 json 反序列化为 Symfony 3.2 中的嵌入对象 - 预期参数类型为“Acme\StoreBundle\Document\Gps”,给定“array”

    Acme StoreBundle 文档 人 MongoDB Document class Person MongoDB bool private hasemail MongoDB EmbedOne targetDocument Gps pr
  • 无法序列化 SolidColorBrush

    错误消息表明我无法序列化类 因为无法序列化 SolidColorBrush 该类具有 Brush 的公共属性 有解决办法吗 它更复杂 我尝试使用可以序列化的支持属性问题是我还需要冻结高光 这样我就可以在BackgroundWorker上创建
  • 使用 Protobuf-net 和 Monotouch for IOS 通过 WCF 序列化 IEnumerable 槽

    我正在尝试在 iOS 的 Monotouch Monodevelop 上编写 WCF 服务 我为可序列化对象使用了标准属性 例如 DataMember DataContract 为我的接口使用了 ServiceContract Operat
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • Rails 序列化数据验证

    我有一个通过默认 AR 行为序列化为 YAML 的字段 例如 它目前位于哈希数组中 name gt hi url gt bye name gt hi url gt bye name gt hi url gt bye 有没有办法可以在其中一些
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • djangorest框架:从序列化器validate()方法设置字段级错误

    我有一个序列化程序 它根据其他字段的值验证字段 在错误响应中 我想将每个字段错误显示为字段错误 而不是显示 non field errors 下的所有内容 如果我提出错误 就会发生这种情况对象级验证方法中的 ValidationError
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 结构体的序列化

    假设我有一个结构体 我想使用winsock 2将其成员值通过网络发送到另一个系统 我正在使用C 语言 我如何将其转换为 char 请记住 在发送之前必须对结构进行序列化 以及如何将 char 反序列化为另一端的结构 我发现增强序列化是对类似
  • 是否有加权水库采样的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当数据流中的点具有相关权重时 是否有一种算法可以执行水库采样 Pavlos Efraimidis 和 Paul Spirakis 的算

随机推荐

  • 防止 ImageMagick 转换为灰度

    我在 Windows 上使用 ImageMagick 6 9 1 调整 PNG 文件的大小 然后再使用其他工具处理它 源文件是 RGBA 但图像数据是灰度 所有像素的 R G 和 B 值相同 看来 ImageMagick 正在检测到这一点
  • 带睡眠和不带睡眠的递归异步

    我有两个版本的异步函数 async function asyncRecurseOne i try console log i i i 1 await asyncRecurseOne i catch ex console log ex asy
  • 将元胞数组的元胞数组转换为矩阵的矩阵

    我可以将矩阵元胞数组转换为矩阵 gt gt C 1 1 2 2 3 3 gt gt cell2mat C ans 1 1 2 2 3 3 还行吧 但是 我想将包含其他元胞数组的元胞数组转换为矩阵 gt gt C 1 1 2 2 3 3 gt
  • 使用 Powershell 查找文件中的多行模式

    如何使用 Powershell 在文件中查找多行模式 例如 XML 节点的内容 也就是说 如果我正在寻找 绿色 这个词deviceDescription节点 但 XML 节点文本可能跨越多行 这是行不通的 dir r i xml selec
  • 单击动态链接时深层链接不包含有效的必需参数

    我已将动态链接设置为文档 但单击链接时它显示 Deep Link does not contain valid required params URL params cpb 1 cpt cpit fpb CJsFEPcCGgVlbi1VUw
  • Azure AD B2C 向新用户发送邀请电子邮件

    通过使用新的 Azure AD B2C 服务预览版 我希望能够向用户发送邀请电子邮件以完成 SaaS 应用程序的注册 我们的每个客户都将管理自己的用户 我希望他们能够向新用户生成邀请电子邮件 以访问我们的 SaaS 应用程序 然后该用户将完
  • 字符串形式的月份名称

    我试图以字符串形式返回月份名称 例如 五月 九月 十一月 I tried int month c get Calendar MONTH 但是 这会返回整数 分别为 5 9 11 如何获取月份名称 用这个 Calendar cal Calen
  • Azure devops 报告生成器任务找不到coverage.cobertura.xml 文件

    正如标题所示 我正在尝试让代码覆盖率在 Azure Devops Pipeline 上运行 这是管道 trigger master pool vmImage windows latest variables solution sln bui
  • 我可以运行受密码保护的只读 git 服务器吗?

    我需要一个应用程序能够从 git 存储库获取但不能推送到它 所以 这是只读部分 这可以通过 git daemon 轻松完成 最重要的是 我需要访问受密码保护的所述存储库 包括读取它 因此 在进行任何获取之前 应用程序需要进行身份验证 可行吗
  • 为什么 null 是一个对象,null 和 undefined 有什么区别?

    Why is null被认为是object在 JavaScript 中 正在检查 if object null Do something 与 if object Do something 并且 有什么区别null and undefined
  • 使用需要不记名令牌的 API 在 Python 中进行 API 调用

    寻求有关将 JSON API 调用集成到 Python 程序中的帮助 我希望将以下 API 集成到 Python py 程序中 以允许调用它并打印响应 API 指南指出必须生成不记名令牌才能允许调用 API 我已成功完成此操作 但是 我不确
  • 有没有办法用 simple_form for Rails 提交 ajax/json 请求

    使用标准 Rails form for 我能够通过 select 和 collection select 帮助器传递 ajax 请求 如下所示 我似乎不知道如何做到这一点简单的形式 弄清楚了 你只需要添加这个 input html gt d
  • 使用 controlTransfer 方法设置奇偶校验

    有人知道如何在 Android 中设置与 controlTransfer 的奇偶校验吗 我在任何地方都找不到此方法参数的解释 只是参考文献中的一些通用信息 我发现的一个例子说 conn controlTransfer 0x40 0x04 0
  • 浮点文字与浮点变量的奇怪编译器行为

    我注意到 C 编译器的浮点舍入 截断有一个有趣的行为 也就是说 当浮点文字超出保证的可表示范围 7 位十进制数字 时 a 将浮点结果显式转换为浮点 语义上不必要的操作 和 b 将中间计算结果存储在局部变量中都会更改输出 一个例子 using
  • Heroku 和 GitHub:“无法检索项目,内部服务器错误”

    这篇文章涉及一个快速变化的事件 我只想连接到我的 GitHub 帐户 当我执行此操作时 我会在页面右上角收到以下红色小弹出窗口的错误消息 无法检索项目 内部服务器错误 截至 2022 年 5 月 25 日 19 52 世界标准时间 GitH
  • 比较两个列表的更新、删除和添加

    简单的问题 我有一个新列表和一个旧列表 在Java中是否有一个标准的方法 库允许我比较这两个列表并确定哪些项目已更新 删除或全新 例如 我最终应该得到三个列表 已删除的项目 旧的项目但不是新的项目 更新的项目 两者中的项目 新项目 新的项目
  • 如何使用 Dapper-dot-net 从单个 SP 映射多个记录

    我想在执行单个存储过程将返回 50 个多个单独的选择的情况下使用 Dapper 每个结果集都不会很宽 最多可能有 20 或 30 列 下面的代码来自 Dapper 测试 我想知道这个示例是否是一个很好的原型 谢谢你 斯蒂芬 public v
  • PHP Curl 下载前检查文件是否存在

    我正在编写一个 PHP 程序 从后端下载 pdf 并保存到本地驱动器 现在如何在下载前检查文件是否存在 目前我正在使用curl 参见下面的代码 来检查和下载 但它仍然下载大小为1KB的文件 url http wedsite test pdf
  • 当我们声明静态变量时,编译器实际上做了什么?

    我想知道幕后到底发生了什么 编译器如何处理静态变量 与自动变量不同 静态变量的值即使在块结束后仍然存在 但是编译器实际上如何处理这个问题 与堆栈上的局部变量不同 静态变量保存在特殊的数据段中 静态变量转到哪个段取决于它们是否初始化为 0 0
  • 跨平台和语言(反)序列化

    我正在寻找一种以最方便的方式序列化一堆 C 结构的方法 以便序列化可以跨 C 和 Java 至少 以及跨 32 位 64 位 大 小端平台移植 要序列化的结构仅包含数据 即它们是没有状态或行为的纯数据对象 我们的想法是 我们将结构序列化为一