C++中使用STL轻松实现序列化

#if 0

在用C++编写应用程序的过程中,经常涉及到序列化的问题,但是序列化的问题通常都
会有非常繁琐的过程代码需要书写,本文中就是通过简单的步骤实现了程序的序列化问题
,简单直接,和其它的序列化方案有着很大的不同。

首先来看看简单的数据写入文件和从文件读入数据的代码:

特别注解:本人特别喜欢用STL来书写代码,一方面是便于移植,但是另一方却是在于
用STL书写的代码简单直接,可读性好。如果还不熟悉STL,本文则不大适合你:)

#endif
#if CODE1

//模拟程序序列化的简单代码
#include <iostream>//cout
#include <fstream>//ofstream,ifstream
#include <vector>//vector
#include <iterator>//ostream_iterator,istream_iterator,back_inserter
#include <numeric>//partial_sum
#include <algorithm>//copy
#include <string>
#include <sstream>
using namespace std;//简化代码的书写,经std名字空间成为默认名字空间
int main()
{
{ //从程序序列化到文件
vector<int> v(5,1);//[1,1,1,1,1]
partial_sum(v.begin(),v.end(),v.begin());//[1,2,3,4,5]
ofstream out("data.txt");//生成文件输出流
//将数组v中的数据全部输出到文件流中,这种操作在C++中成为文件操作
//在这里暂时称为序列化到文件操作。实际上这里为了简单序列化的格式
//为文本文件格式。如果需要其它的格式完全可以通过自定义输出流游标
//的方式,或者重载运算符operator<<和operator>>实现不同的序列化格
//式。可以参见本人的其它相关文档。
copy(v.begin(),v.end(),ostream_iterator<int>(out," "));
}
{ //从文件序列化到程序
vector<int> v;//模拟应用程序中数据
ifstream in("data.txt");//建立输入流
//下面的这行代码从文件中提取数据到v中,模拟了应用程序的序列化过程
copy(istream_iterator<int>(in),istream_iterator<int>(),back_inserter(v));
//下面的这行代码仅仅只是为了显示是否真的被序列化到了程序中
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
}
return 0;
}

//该程序的输出如下:
/*******************************************************************************
1 2 3 4 5
*******************************************************************************/
//data.txt中的内容如下:
/*******************************************************************************
1 2 3 4 5
*******************************************************************************/

#endif//CODE1
#if 0
很明显我们在应用程序中保存了数据的类型信息,如:文件中的[1,2,3,4,5]的类型“
int”信息是保存在程序中的,这一点是和其它的序列化方案有着极大的不同,用过MFC的
都知道,MFC中为了实现序列化功能,必须将所有的类型信息和数据信息同时保存在文件中
,虽然都是以二进制格式的形式,但是通过二进制编辑器可以很容易的看出你面保存的类
型信息字符串,这一点是有安全隐患的。所以从安全和保密上讲,本文中的方
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值