C++ 将文件数据一次性加载进内存实例代码

C++ 将文件数据一次性加载进内存实例代码,第1张

概述C++将文件数据一次性加载内存实例代码问题:早先写了一个目标检测SDK,里面有从bin文件加载模型和从内存加载模型两个接口。后来遇到了级联检测,即有多个bin模型文件,当想要把多个bin文件合并成一个的时候,发现

C++ 将文件数据一次性加载进内存实例代码

问题:

早先写了一个目标检测SDK,里面有从bin文件加载模型和从内存加载模型两个接口。后来遇到了级联检测,即有多个bin模型文件,当想要把多个bin文件合并成一个的时候,发现对应的加载接口也得变。

解决:

为了不改变接口,采用了下面的解决思路:

(1) 将多个bin文件进行拼接,同时记录每个文件的大小.

合并后的文件为: 模型文件个数+模型A大小+…+模型X大小+模型A参数…

(2) 采用下面的方法将这个合并的文件一次性加载进内存

 /**************** 将模型整个读入内存  ********************/  std::ifstream infile(detModfile,std::ios::binary);  if (!infile.is_open())   {     printf( "connot open the model file: %s\n",detModfile);     return -1;   }   std::filebuf *pbuf = infile.rdbuf();   // 获取文件大小  long filesize = static_cast<long>((pbuf->pubseekoff (0,std::ios::end,std::ios::in)));   pbuf->pubseekpos (0,std::ios::in);  unsigned char* modelptr = new unsigned char[filesize];   // 读入文件内容  pbuf->sgetn ((char*)modelptr,filesize);   infile.close();     // 获取模型个数  int model_num;  int p_offset = 0;  memcpy(&model_num,modelptr,sizeof(int));  p_offset += sizeof(int);  //获取每个模型大小  std::vector<int> each_size(model_num);  int model_size;  for (int i = 0; i < model_num; i++)  {    memcpy(&model_size,modelptr+p_offset,sizeof(int));    p_offset += sizeof(int);    each_size[i] = model_size;  }

(3) 然后调用从内存加载的接口;

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的C++ 将文件数据一次性加载进内存实例代码全部内容,希望文章能够帮你解决C++ 将文件数据一次性加载进内存实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存