• 【halcon C++编程 序列化与反序列化】



    1.1.定义:

    把对象转换为字节序列的过程称为对象的序列化
    把字节序列恢复为对象的过程称为对象的反序列化

    1.2.对象的序列化主要有两种用途:

    1) 把对象的字节序列保存到硬盘上,通常存放在一个文件中
    2) 在网络上传送对象的字节序列

    1.3.说明:

    应用中需对某些对象进行序列化,让它们离开内存空间入住物理硬盘以便长期保存
    如Web服务器中Session对象,当有10万用户并发访问有可能出现10万个Session对象,
    内存可能吃不消,要求把一些seesion先序列化到硬盘中,等要用时再把硬盘中对象还原到内存中

    当两个进程进行远程通信时彼此可发送各种类型数据。
    无论是何种类型数据都会以二进制序列形式在网络上传送。
    发送方需要把对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象

    2.实例:

    实例1:

    read_image (Image, 'fabrik')
    read_image (Image0, 'letters')
     
    open_file ('ha_image.txt', 'output_binary', FileHandle)
     
    serialize_image (Image, SerializedItemHandle)
    serialize_image (Image0, SerializedItemHandle0)
     
    //序列化:
    fwrite_serialized_item (FileHandle, SerializedItemHandle)
    fwrite_serialized_item (FileHandle, SerializedItemHandle0)
     
    close_file (FileHandle)
     
    open_file ('ha_image.txt', 'input_binary', FileHandle)
     
    fread_serialized_item (FileHandle, SerializedItemHandle1)
    fread_serialized_item (FileHandle, SerializedItemHandle2)
     
    //反序列化:
    deserialize_image (Image1, SerializedItemHandle1)
    deserialize_image (Image2, SerializedItemHandle2)
     
    close_file (FileHandle)
    

    实例2:

    void action(){
    	  HObject  ho_Image, ho_Image0, ho_Image1, ho_Image2;
     
    	  HTuple  hv_FileHandle, hv_SerializedItemHandle;
    	  HTuple  hv_SerializedItemHandle0, hv_SerializedItemHandle1, hv_SerializedItemHandle2;
     
    	  ReadImage(&ho_Image, "fabrik");
    	  ReadImage(&ho_Image0, "letters");
    	  
    	  OpenFile("ha_image.txt", "output_binary", &hv_FileHandle);
    	  
    	  //序列化:
    	  SerializeImage(ho_Image, &hv_SerializedItemHandle);
    	  SerializeImage(ho_Image0, &hv_SerializedItemHandle0);
    	  
    	  FwriteSerializedItem(hv_FileHandle, hv_SerializedItemHandle);
    	  FwriteSerializedItem(hv_FileHandle, hv_SerializedItemHandle0);
    	  
    	  CloseFile(hv_FileHandle);
     
    	  OpenFile("ha_image.txt", "input_binary", &hv_FileHandle);
    	  
    	  FreadSerializedItem(hv_FileHandle, &hv_SerializedItemHandle1);
    	  FreadSerializedItem(hv_FileHandle, &hv_SerializedItemHandle2);
    	  
    	  //反序列化:
    	  DeserializeImage(&ho_Image1, hv_SerializedItemHandle1);
    	  DeserializeImage(&ho_Image2, hv_SerializedItemHandle2);
    	  
    	  CloseFile(hv_FileHandle);
     
    }
    
    read_image (Image, 'fabrik')
    read_image (Image0, 'letters')
    open_file ('1.dat', 'output_binary', FileHandle)
    serialize_image (Image, SerializedItemHandle)
    serialize_image (Image0, SerializedItemHandle0)
    fwrite_serialized_item (FileHandle, SerializedItemHandle)
    fwrite_serialized_item (FileHandle, SerializedItemHandle0)
    close_file (FileHandle)
    open_file ('1.dat', 'input_binary', FileHandle)
    fread_serialized_item (FileHandle, SerializedItemHandle1)
    fread_serialized_item (FileHandle, SerializedItemHandle2)
    deserialize_image (Image1, SerializedItemHandle1)
    deserialize_image (Image2, SerializedItemHandle2)
    close_file (FileHandle)
    
  • 相关阅读:
    Linux桌面环境中应用程序无法启动图形交互界面
    123.Impala查询缓慢问题与解决
    基于百度地图实现矩形绘制/电子围栏/自定义覆盖物选择、点击、区域选中、轨迹绘制
    Windows10安装MySQL
    Axios 前后端交互工具学习
    如何使用智能家居改造一个满意舒适的宿舍
    Javaweb与Mybatis实现简单的用户注册登录
    图片去水印免费软件哪个好?这几款软件值得一看
    android jni通过反射打印java类的所有方法
    WebGL实现简易的局部“马赛克”
  • 原文地址:https://blog.csdn.net/weixin_42483745/article/details/127043221