如何将提升::multi_array保存到文件
How to save a boost::multi_array to a file
我正在寻找一种简单的方法来保存和加载 3D 提升::multi_array的文件。据我所知,Boost 库中没有任何我觉得奇怪的方法。
我不需要文件是人类可读的,所以二进制文件会更好地提高性能。任何人都可以指出我一个现成的解决方案或给我有关如何实现这种读/写方法的想法吗?
我使用布尔和整数类型的 3D multi_arrays,所以我需要使用模板。
没有必要使用一些特殊的序列化库,因为您的数据已经在内存中序列化,您可以按如下方式获取它(假设A
是包含int
数据的数组:
int *data = A.data();
size_t size = A.num_elements();
您可以将其一一写入文件。更好的方法可能是使用 mmap
,如下所示:
int fd = open("myfile", O_RDWR);
size_t bytes = size * sizeof(int);
ftruncate(fd, bytes);
void *buf = mmap(NULL, bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
memcpy(buf, data, bytes);
close(fd);
munmap(buf, bytes);
将数据从文件重新加载到A
非常容易。只需省略ftruncate
调用并调用memcpy(data, buf, bytes);
.
更好的方法是,如果您的数据很大,您只需将数据存储在文件中,使用 mmap
将其映射到内存地址,然后将地址传递给 multi_array_ref
.在这种情况下,您无需专门将其写入文件。它是由操作系统芳香地完成的。
上面的代码被认为是Linux的,但我相信其他平台应该具有类似的功能。为清楚起见,省略了错误检查。
相关文章:
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 从函数角度看ID到文件路径的内部与外部映射
- 将 std::array 移动到另一个 std::array
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 看不到文件'SDL2.lib'
- 将字符串存储到文件下一行的变量中
- 将类型保存到文件
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- C++ 生成文件未检测到 .h 文件中的更改
- 如何存储 unicode 字符并将其输出到文件?
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 将 clangd stderr 重定向到文件而不是控制台
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 是否可以将图像列表保存到文件中?
- 按下 QPushbutton 时将文本保存到文件
- 如何在C++中附加到文件?
- C++ ZBar cmake 错误"找不到文件"时包括
- C++以尽可能快的速度逐行将字符串保存到文件中
- LittleFS文件系统,NOR闪存的文件写入问题