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

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) 然后调用从内存加载的接口;

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

(0)

相关推荐

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

    C++ 将文件数据一次性加载进内存实例代码 问题: 早先写了一个目标检测SDK,里面有从bin文件加载模型和从内存加载模型两个接口.后来遇到了级联检测,即有多个bin模型文件,当想要把多个bin文件合并成一个的时候,发现对应的加载接口也得变. 解决: 为了不改变接口,采用了下面的解决思路: (1) 将多个bin文件进行拼接,同时记录每个文件的大小. 合并后的文件为: 模型文件个数+模型A大小+-+模型X大小+模型A参数- (2) 采用下面的方法将这个合并的文件一次性加载进内存 /********

  • php+jquery+html实现点击不刷新加载更多的实例代码

    基本原理:页面载入时,jQuery向后台请求数据,PHP通过查询数据库将最新的几条记录显示在列表页,在列表页的底部有个"更多"链接,通过触发该链接,向服务端发送Ajax请求,后台PHP程序得到请求参数,并作出相应,获取数据库相应的记录并以JSON的形式返回给前台页面,前台页面jQuery解析JSON数据,并将数据追加到列表页.其实就是Ajax分页效果. HTML 首先要引入jquery库和jquery.more.js插件,jquery.more.js已经将许多功能都封装好了,并提供了参

  • ListView实现下拉刷新加载更多的实例代码(直接拿来用)

    ListView Api bixu 好好看看 mNewsAdapter.notifyDataSetChanged();//刷新ListView 自定义的RefreashListView package com.itguang.dell_pc.myapplication.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import and

  • vue底部加载更多的实例代码

    要实现的效果如下: <template> <div class="newsList"> <div v-for="(items, index) in newsList"> <div class="date">{{showDay(index)}}</div> <div class="list" > <ul> <li class="l

  • BootstrapTable加载按钮功能实例代码详解

    1      html <!--工具栏--> <div id="toolbar" class="btn-group"> <div style="float:left;margin-right: 10px"> <button class="btn btn-danger"onclick="openModal('add',0,'')">增加</button&g

  • ios弹幕高效加载实现方式实例代码

    看直播的童鞋们应该会经常看到满屏幕的滚动弹幕,看到密密麻麻的弹幕第一印象就是怎么样高效加载来避免卡顿,弹幕组成部分包含用户头像.用户昵称.弹幕的内容.表情等,本文介绍的实现原理就是把这几部分绘制成一张图片,然后通过定时器移动弹幕图片,当图片不在屏幕范围内即销毁. 先看下效果 下面我会详细介绍下实现原理 1 .获取弹幕数据来源,因为我是模拟生成弹幕,弹幕的数据存放在工程里的plist文件中 emotions存放这条弹幕的表情,type表示是否是自己发的,text表示弹幕内容,userName表示用

  • iOS 懒加载的使用实例代码

    写在前面 昨天晚上写的那个代码在配置数组数据的时候突然想到加载数据的时候可以不用在viewDidLoad中加载,可以什么时候用什么时候加载,这种技术就是这篇文章的懒加载方法.然后记录一下.内容如下: 什么是懒加载 懒加载又称为延迟加载,它是指系统不会在初始化是就加载某个对象,而是在第一次调用(使用 get 方法)时才加载这个对象到内存,简单点儿说就是当对象被系统或者开发者需要用到的时候再去加载.它的实现方法实质上就是覆写该对象的 get 方法,并将该对象在初始化时需要实现的代码在 get 方法中

  • Android 异步加载图片的实例代码

    异步加载图片的主要流程是进行判断缓存中是否存在图片,如果存在则直接返回,如果不存在则进行下载并进行缓存. 以下是建立一个异步下载类: 复制代码 代码如下: /** * User: Tom * Date: 13-5-13 * Time: 下午8:07 */public class AsnycImageLoader { //定义一个HashMap进行存放缓存的Image key为String Value为一个弱引用的一个资源文件    // 图片 为了方便JAVA的回收    private Map

  • Vue.js上下滚动加载组件的实例代码

    由于工作的需要并鉴于网上的vue.js滚动加载方案不合适,自己写了一个简单实用的.就短短的150行代码. 组件代码 // scrollLoader.vue // 滚动加载组件 <style scoped> .container-main {margin: 0 auto; overflow: auto; overflow-x: hidden; padding: 0;} .loading{ width: 100%; height: 40px; position: relative; overflo

  • 利用canvas实现的加载动画效果实例代码

    前言 以前在浏览文章时,看到过一个Android的加载效果,觉得挺好看的,于是自己就模仿了一个.下面话不多说,我们直接来看看详细的介绍吧. 运行效果图 分析下这个效果: 1.可以把这四个方块标号 2.这个运动效果其实只用分解为两段动画,一段是上下移动,一段是左右移动. 示例代码: /*核心代码*/ /*分析动画,其实动画只有两次的执行*/ var for_index = 1;//记录当前执行动画的序列 var interval = setInterval(function(){ if(for_i

随机推荐