实例解析C++/CLI的串行化

串行化可使对象被转换为某种外部的形式,比如以文件存储的形式供程序使用,或通过程序间的通讯发送到另一个处理过程。转换为外部形式的过程称为"串行化",而逆过程称为"反串行化"。

简介

请看例1中的示例,其将多个对象类型的值写入到一个新的磁盘文件中,关闭文件,接着再把这些值重新读取到内存中。

例1:

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Binary;
int main()
{
  array<int>^ intArray = {10, 20, 30};
  array<float,2>^ floatArray = {
   {1.2F, 2.4F},
   {3.5F, 6.8F},
   {8.4F, 9.7F}
  };
  DateTime dt = DateTime::Now;
  Console::WriteLine("dt >{0}<", dt);
  /*1*/ BinaryFormatter^ formatter = gcnew BinaryFormatter;
  //将数据串行化到一个文件
  /*2*/ Stream^ file = File::Open("Sr01.ser", FileMode::Create);
  /*3a*/ formatter->Serialize(file, "Hello");
  /*3b*/ formatter->Serialize(file, intArray);
  /*3c*/ formatter->Serialize(file, floatArray);
  /*3d*/ formatter->Serialize(file, true);
  /*3e*/ formatter->Serialize(file, dt);
  /*3f*/ formatter->Serialize(file, 1000);
  /*3g*/ formatter->Serialize(file, L'X');
  /*3h*/ formatter->Serialize(file, 1.23456F);
  /*4*/ file->Close();
  //从文件中反串行化数据--即读取数据
  /*5*/ file = File::Open("Sr01.ser", FileMode::Open);
  /*6a*/ String^ s = static_cast<String^>(formatter->Deserialize(file));
  Console::WriteLine("String >{0}<", s);
  /*6b*/ array<int>^ newIntArray =
  static_cast<array<int>^>(formatter->Deserialize(file));
  Console::WriteLine("newIntArray:");
  for (int i = 0; i < newIntArray->Length; ++i)
  {
   Console::Write(" {0}", newIntArray[i]);
  }
  Console::WriteLine();
  /*6c*/ array<float,2>^ newFloatArray =
  static_cast<array<float,2>^>(formatter->Deserialize(file));
  Console::WriteLine("newFloatArray:");
  for (int i = 0; i < 3; ++i)
  {
   for (int j = 0; j < 2; ++j)
   {
    Console::Write(" {0}", newFloatArray[i,j]);
   }
   Console::WriteLine();
  }
  /*6d*/ bool b = static_cast<bool>(formatter->Deserialize(file));
  Console::WriteLine("bool >{0}<", b);
  /*6e*/ DateTime newDT = static_cast<DateTime>(formatter->Deserialize(file));
  Console::WriteLine("newDT >{0}<", newDT);
  /*6f*/ int v = static_cast<int>(formatter->Deserialize(file));
  Console::WriteLine("int >{0}<", v);
  /*6g*/ wchar_t c = static_cast<wchar_t>(formatter->Deserialize(file));
  Console::WriteLine("wchar_t >{0}<", c);
  /*6h*/ float f = static_cast<float>(formatter->Deserialize(file));
  Console::WriteLine("float >{0}<", f);
  /*7*/ file->Close();
}

时间: 2024-08-30 11:42:28

实例解析C++/CLI的串行化的相关文章

详解PHP对象的串行化与反串行化_php实例

什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候 今天我们要提到四个函数 全部串行化 1.serialize(对象名) 将指定的类对象串行化 $str=serialize($per) //将per对象串行化,结果返回给$str 2.unserialize(串行化后的返回值) 返回结果是对象 $per=unserialize($str); 局部串行化 3.__sleep() 串行化某对象的部分属性. 4.__wakeup()反串行化时,初始化(其实是修改)对象内容 前两个的使

.NET使XML串行化易如反掌

xml   人们一直高喊XML是解决系统互联问题的关键, 而.NET framework 也为处理XML数据提供了许多不同的类库. XmlDocument 类能让你像处理文件一样处理XML 数据, 而XmlReader, XmlWriter, 和它们的派生类使你能够将XML 数据做为数据流处理. XmlSerializer 则提供了另外的方法, 它使你能够将自己的对象串行和反串行化为XML. 串行化数据既能够让你像处理文件一样对数据进行随机存取, 同时又能够跳过你不感兴趣的元素. 在本文中, 我

怎样给串行化类分配版本号(可配置版本模式)

编写可串行化类时,MFC用你指定的模式号制定一个粗略的版本控制方式.在向档案写数据时, MFC用模式标记该类的实例:而在读回数据时,MFC将档案中的记录的模式号和应用程序中使用着的该类对象的模式号做比较,如果两模式号不匹配,则MFC发送一个CArchiveException,其m_cause 等于CArchiveException::badSchema.没有得到处理的该类异常会促使MFC显示一个对话框,提示 "非预期的文件格式".如果每次修改对象的串行化存储格式时都能做到增加模式号,那

MFC如何生成一个可串行化的类

一.MFC允许对象在程序运行的整个过程中持久化的串行化机制 (1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程. (2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构)的状态. (3)MFC支持CObject类中的串行化,所以,所有继承于CObject的类可以利用CObject的串行化协议. (4)串行化的基本思想:           a.对象必须能将其当前状态写入到持久化存储媒介中,通常用其成员变量实现.           b.对象可以通过读或反序列化从存

php面向对象全攻略 (十六) 对象的串行化_php基础

把对象串行化 有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串, 等到达另一端时,再还原为原来的对象,这个过程称之为串行化,就像我们现在想把一辆汽 车通过轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这些部件组装回汽车. 有两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要 将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化. 串行化有两个过程,一个是串行

php面向对象 自动加载类 对象串行化 多态的应用

自动加载类很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里

C#基础知识回顾--串行化与反串行化

        串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性,就可以实现串行化实 的成员.反串行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量.串行化能保存现有对象的所有状态, 我想我们以前见过的一些游戏的角色账户中的dat文件应该就是被串行化的结果.我尝试了打开一个dat文件,果真得到了 我需要的信息,一些角色的等级之类的信

XML串行化数据基础

xml|数据 XML文档使用越来越普遍,我们常会把一些系统设置等文件用config或XML文档存文在程序目录下..Net的串行化数据是一个很令人心动的技术,可以很方便地读取一定格式或保存成文件.下面做个简单了练习,对XML串行化作些初步了解.(注:我是在WINDOWS应用程序上做的练习,因怕建立ASP.NETA工程麻烦,下面一大堆东西.其实除了路径外,程序写法基本一致). 先编写一个需要串行化的类,该类是设置一个操作权限的设置文件 using System; namespace Hellosea

XML串行化数据的基础

xml|数据 XML文档使用越来越普遍,我们常会把一些系统设置等文件用config或XML文档存文在程序目录下..Net的串行化数据是一个很令人心动的技术,可以很方便地读取一定格式或保存成文件.下面做个简单了练习,对XML串行化作些初步了解.(注:我是在WINDOWS应用程序上做的练习,因怕建立ASP.NETA工程麻烦,下面一大堆东西.其实除了路径外,程序写法基本一致). 先编写一个需要串行化的类,该类是设置一个操作权限的设置文件 using System; namespace Hellosea