使用平面缓冲区读取以前写入的二进制文件的数据
Use Flatbuffers to read data of previously written binary files
>我有一个二进制文件,其中包含要加载到Flatbuffer对象中的数据。举个玩具示例,我使用以下架构:
namespace SingleInt;
table Single{
value:uint32;
}
root_type Single;
考虑我的二进制文件只包含以下信息:一个unsigned int
值,没有其他任何内容。在本例中,我将值5
存储在我的文件中。我正在尝试使用以下方法将二进制文件的内容分配并显示到我的 Flatbuffer 对象中:
void readFbs(){
int fd = open("myfile", O_RDONLY, 0);
unsigned int* memmap = (unsigned int*)mmap(0, sizeof(unsigned int), PROT_READ, MAP_SHARED, fd, 0);
auto myfile = SingleInt::GetSingle(memmap);
std::cout<<myfile->value()<<std::endl;
}
输出是值0
,而不是我认为我会得到的值5
。
我的问题是:知道二进制文件是如何序列化和写入的,如果我创建一个表示它的模式,是否可以将其内容加载到 Flatbuffer 对象中?
编辑:写入数据的功能
void writebin(){
unsigned int var = 5;
std::ofstream OutFile;
OutFile.open("myfile", std::ios::out | std::ios::binary);
OutFile.write(reinterpret_cast<char*>(&var), sizeof(var));
OutFile.close();
}
您的编写代码只是将裸int
写入文件。您需要改用 FlatBuffers 函数来编写与 FlatBuffers 格式兼容的内容,例如
FlatBufferBuilder fbb;
fbb.Finish(CreateSingle(fbb, 5));
// Now write the buffer starting at fbb.GetBufferPointer() for fbb.GetSize() to a file.
更多详情请见 https://google.github.io/flatbuffers/flatbuffers_guide_tutorial.html
相关文章:
- 如何使用位字段将数据从二进制文件复制到结构中?
- C++ 尝试优化每一帧将数据打印到二进制文件
- 如何在二进制文件上附加数据?
- 在二进制文件中写入对齐的数据
- 如何在二进制文件中组织数据?
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- 使用平面缓冲区读取以前写入的二进制文件的数据
- 如何从 linux 二进制文件中存储和检索数据
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 如何在结构中存储二进制文件数据
- 保存和加载类数据存储在C 中的二进制文件中
- 通过Google Protobuf发送二进制文件数据
- 从二进制文件C++更新数据
- 在C++中使用 CArchive 类从二进制文件中读取短数据
- 如何使用dlang读取二进制文件数据
- 将敏感数据存储在C 编译的二进制文件中是否安全
- 检测二进制文件数据的端性
- 在 VC++ 中将类数据读取和写入二进制文件
- 用于存储数据的结构和外部二进制文件
- 在C++中读取二进制文件时缺少数据