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)