畅聊C++中stringstream对象
发布时间:2021-12-14 21:42:13 所属栏目:教程 来源:互联网
导读:iostream标准库支持对于内存的输入输出,只要将流与存储在程序内存中的string对象捆绑在一起,就可以使用通用的输入输出操作符来读写string对象!标准库中定义了三种类型的字符串流: istringstream,由istream派生出来的,用于读一个string的对象; ostring
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目标类的序列化操作具体课参加这篇文中的内容!http://www.linuxidc.com/Linux/2012-08/69192.htm 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对象的使用非常的灵活,在这里把自己能想到的几点记录了下来,以供参考! ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |