【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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【网络星空】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值