问题标签 [binary-deserialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
156 浏览

c++ - 使用 std::ifstream::read() 从文件中通过 char * 二进制数据读取 int

背景:这个问题是这个问题的后续。
给定的答案建议通过unsigned char *而不是char*成功访问数据。

主要问题:但是如果我们别无选择,我们该怎么办?(即,如果char*由函数原型强加)。


语境:

假设我们已将int二进制格式的数组写入文件。
它可能看起来像(没有错误检查):

现在我想打开文件,读取它,将之前写入的数据一一打印出来。

打开如下执行(不检查错误):

此时,byte_size == len*sizeof(int)


可能的解决方案:

我知道我可以通过以下方式做到这一点:

或通过:

这两种解决方案都可以正常工作,但它们都不是这个问题的目的。


问题描述:

我在这里考虑我想将完整的二进制文件内容放入 achar*并在之后处理它的情况。
我不能使用,unsigned char*因为std::ifstream::read()期待char*.

我试过了:

通过std::memcpy将 4 个字节复制到 中int,我得到了预期的结果(打印val的 s 与原始值相同)。

通过按位移位,即使使用reinterpret_cast<unsigned char*>缓冲区,我也会得到垃圾值,导致无法取回原始int值(打印val的 s 是“垃圾”值:与原始值不同)。

我的问题是:什么是能够从 a而不是whilestd::memcpy中取回正确的值,而我的按位移位是不可能的? 我怎么能在不使用(出于一般利益目的)的情况下解决它?我想不通。char*unsigned char*
std::memcpy

0 投票
0 回答
44 浏览

rust - 什么是反序列化元素类型不同的数组的优雅方法?

我有两个文件。第一个文件包含数据模式。第二个文件包含数据。

数据模式描述行中的元素

数据文件包含二维数组

我编写了该代码并且它有效。但也许有更优雅的方法来解决这个问题。

bincode::deserialize(bytes_slice).unwrap()重复了好几次,这在我看来很奇怪

0 投票
0 回答
8 浏览

kafka-consumer-api - Kafka Avro 消息反序列化问题

Kafka 中的 Avro 消息反序列化面临一个非常奇怪的问题。在反序列化消息时,仍然在生产者和消费者中使用相同的模式,字段将移动一个位置。反序列化的消息如下所示:

事件(时间戳=null,guid1=2021-09-09T09:21:36.135Z,guid2=f490dad5-8e31-48f6-a67e-32a7a6fb216b,guid3=97b334e0-f952-4f14-b9d3-c8bf1542b344e4-66 -94c0-feff8b122ce4,field1=85c69bb2-440b-46fb-88f4-85a6ad55b214,field2=IOS,field3=未知)

有没有人遇到过这种问题。

0 投票
1 回答
76 浏览

c++ - C++ 中对象序列化的主要目的是为了更快地加载对象吗?

我正在阅读其他人编写的项目的代码。该项目的主要任务是将包含 8 列的大型结构化文本文件 (.txt) 的内容读取到 KnowledgeBase 对象中,该对象具有许多方法和变量。然后将 KnowledgeBase 对象输出到二进制文件中。例如,KnowledgeBase 类至少有这两个变量:

当我使用 gdb 跟踪代码时,这些变量很容易理解。然后,它似乎正在将这些向量和映射转换为二进制形式。并且上面的两个变量都有对应的二进制形式:

后来输出到二进制文件时,它有这样的代码:

从原始知识库到二进制的转换代码很复杂。我的问题是,这种转换的主要目的是什么?是否比纯文本文件更快地将二进制文件加载到内存中?纯文本文件很大。我了解到对象序列化主要用于通过网络传输对象,但我不认为这里的目的是为了这个。它更像是为了加快数据加载和节省内存。这可能是 C++ 中对象序列化的一部分吗?

0 投票
0 回答
12 浏览

java - 使用 IoBuffer 序列化/反序列化可选值

在我们的项目中,我们使用 org.apache.mina.core.buffer.IoBuffer 来序列化和反序列化对象并通过网络发送。还有一项要求是通过相同的方式发送可选值。Optional<> 是一个不可序列化的实体,我不能这样做。是否有解决此问题的解决方法?