设为首页 加入收藏

TOP

浅谈c++中stringstream对象
2012-11-04 13:52:47 来源: 作者: 【 】 浏览:282
Tags:浅谈 stringstream 对象
  iostream标准库支持对于内存的输入输出,只要将流与存储在程序内存中的string对象捆绑在一起,就可以使用通用的输入输出操作符来读写string对象!标准库中定义了三种类型的字符串流:
  
  istringstream,由istream派生出来的,用于读一个string的对象;
  
  ostringstream,由ostream派生出来的,用于写一个string的对象;
  
  stringstream,由iostream派生出来,同时提供了对于stringstream对象的功能!!
  
  要是用上述的三个类,必须包含sstream头文件!!
  
  stringstream对象的一个重要的功能是让我们更方便的操作string对象!请看下面这个例子:
  
  1、可以在定义这个对象的时候进行初始化操作:
  
  #include<sstream>
  
  #include<string>
  
  #include<iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  string str;
  
  int i = 12345;
  
  stringstream ss;
  
  ss 《 i;
  
  str = ss.str();
  
  return 0;
  
  }
  
  其中ss.str()返回的是一个流中保存的string对象的副本,这样就实现了通过流对象对一个string对象的赋值操作
  
  从而增加string对象操作的灵活性!
  
  2、另外一个很重要的方面就是可以通过stringstream来实现数据类型的转换将一个string对象中保存的字符串
  
  还原成原来的数据结构!
  
  #include<sstream>
  
  #include<string>
  
  #include<iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  string str = “12345true”;
  
  stringstream ss;
  
  int i;
  
  bool j;
  
  ss.str(str);
  
  ss 》 i;
  
  ss 》 j;
  
  cout 《 i 《endl;
  
  cout 《 j 《endl;
  
  return 0;
  
  }
  
  3、另外一个非常重要是将其作为一个socket通信中一个重要的载体来接收和存储recv和send处理的数据!
  
  这样就可以直接作为boost序列化和反序列化的操作对象,来实现序列化和反序列化的操作!
  
  while(true)
  
  {
  
  if((x = recv(int socket,char *buf, int len,0)) < 0)
  
  {
  
  sys_err(“recv() error!!”);
  
  exit(-1);
  
  }
  
  else if(x > 0)//说明此处的数据尚未接收完毕,继续往流对象中添加!!
  
  {
  
  ss 《 buf;
  
  }
  
  else
  
  {
  
  break;
  
  }
  
  }
  
  boost::archive::text_iarchive ia(ss);
  
  ia 》 BOOST_SERIALIZATION_NVP(des);//这样就可以直接将接受的数据对象进行反序列化操作,在
  
  内存中进行,提高了速度!!这里对于des目标类的序列化操作具体课参加上一篇博文中的内容!
  
  send(int socket,char *buf,int len,0);
  
  对于发送的操作同样可以直接利用我们这里stringstream对象:
  
  boost::archive::text_oarchive oa(ss);
  
  oa 《 BOOST_SERIALIZATION_NVP(des);通过这样的方式将我们需要发送的数据结构写入流对象!
  
  send(socket,ss.str(),ss.str()。size(),0);将流中存储的序列化之后的字符串,直接发送出去,加快了速度!
  
  关于stringstream对象的使用非常的灵活,在这里把自己能想到的几点记录了下来,以供参考!
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇防止Visual C++应用程序缓冲区溢出 下一篇如何输出一个螺旋矩阵

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: