问题标签 [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.
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
rust - 什么是反序列化元素类型不同的数组的优雅方法?
我有两个文件。第一个文件包含数据模式。第二个文件包含数据。
数据模式描述行中的元素
数据文件包含二维数组
我编写了该代码并且它有效。但也许有更优雅的方法来解决这个问题。
bincode::deserialize(bytes_slice).unwrap()
重复了好几次,这在我看来很奇怪
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=未知)
有没有人遇到过这种问题。
c++ - C++ 中对象序列化的主要目的是为了更快地加载对象吗?
我正在阅读其他人编写的项目的代码。该项目的主要任务是将包含 8 列的大型结构化文本文件 (.txt) 的内容读取到 KnowledgeBase 对象中,该对象具有许多方法和变量。然后将 KnowledgeBase 对象输出到二进制文件中。例如,KnowledgeBase 类至少有这两个变量:
当我使用 gdb 跟踪代码时,这些变量很容易理解。然后,它似乎正在将这些向量和映射转换为二进制形式。并且上面的两个变量都有对应的二进制形式:
后来输出到二进制文件时,它有这样的代码:
从原始知识库到二进制的转换代码很复杂。我的问题是,这种转换的主要目的是什么?是否比纯文本文件更快地将二进制文件加载到内存中?纯文本文件很大。我了解到对象序列化主要用于通过网络传输对象,但我不认为这里的目的是为了这个。它更像是为了加快数据加载和节省内存。这可能是 C++ 中对象序列化的一部分吗?
java - 使用 IoBuffer 序列化/反序列化可选值
在我们的项目中,我们使用 org.apache.mina.core.buffer.IoBuffer 来序列化和反序列化对象并通过网络发送。还有一项要求是通过相同的方式发送可选值。Optional<> 是一个不可序列化的实体,我不能这样做。是否有解决此问题的解决方法?