| 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(); } |
在标记1中,我们定义了一个BinaryFormatter类型的变量,此种类型的任意对象都可以二进制的形式进行串行与反串行化。
在标记2中,用指定的名称创建了一个新的文件,后缀 .ser没有特别的意思,这是约定俗成的表示这是一个串行化数据文件。从标记3a至3h,表示一个对象被串行化至文件中。在字符串的情况下,每个字符都被写入;在数组的情况下,所有元素都被写入;在日期时间的情况下,类型中包含的所有数据及有关依赖项都被写入;在为原始类型值的情况下,它们先被装箱,然后对应的对象被写入。上述动作中,串行化只需要接收一个Object^类型参数的对象即可。
| String >Hello< newIntArray 10 20 30 newFloatArray: 1.2 2.4 3.5 6.8 8.4 9.7 bool >True< newDT >9/29/2005 3:25:44 PM< int >1000< wchar_t >X< float >1.23456< |
| using namespace System; using namespace System::IO; using namespace System::Collections; using namespace System::Runtime::Serialization::Formatters::Binary; int main() { /*1*/ Hashtable^ dictionary = gcnew Hashtable(21000); StreamReader^ inStream = File::OpenText("dictionary.txt"); //打开字典文件 String^ str; while ((str = inStream->ReadLine()) != nullptr) { /*2*/ dictionary->Add(str, nullptr); } inStream->Close(); /*3*/ Console::WriteLine("Dictionary contains {0} entries", dictionary->Count); BinaryFormatter^ formatter = gcnew BinaryFormatter(); Stream^ file = File::Open("dictionary.ser", FileMode::Create); /*4*/ formatter->Serialize(file, dictionary); file->Close(); } |
【中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页】