[C/C++标准库]_[中级]_[使用stringstream作为内存流读取]
来源:互联网 发布:高中数学最优化问题 编辑:程序博客网 时间:2024/05/16 15:40
场景:
1. C++标准string是可以支持unsigned char* 字节数据的,只要使用以下两个函数就可以添加即使是0x0的数据.
string& append( const char* str, size_type num );string( const char* str, size_type length );
2.stringstream可作为内存流来使用,比如再需要处理文件,过滤内容后再输出到另一个文件里。内存流不需要操作文件指针,比较省时间和io.
流向: ifstream(FILE*)->ostringstream->istringstream->ofstream(FILE*)
http://www.cplusplus.com/reference/ios/
测试代码: test_stream.cpp
#include <locale>#include <iostream>#include <stdlib.h>#include <string>#include <fstream>#include <string.h>#include <sstream>using namespace std;void TestMemoryStream(){unsigned char buf[] = {0xf1,0x0,0xfe,0x00};string str((char*)buf,4);size_t str_size = str.size();cout << "str_size: " << str_size << endl;cout << (int)str[1] << endl;istringstream iss(str,ios_base::in);iss.seekg(0,ios_base::beg);char buffer[4];memset(buffer,0,sizeof(buffer));iss.read(buffer,1);cout << (int)(buffer[0] & 0xff) << endl;iss.seekg(0,ios_base::end);size_t last_pos = iss.tellg();cout << "stream size: " << last_pos << endl;}//http://www.cplusplus.com/reference/ios/int main(int argc, char const *argv[]){//1.测试内存流.TestMemoryStream();//2.文件流->内存流->文件流.//ifstream->ostringstream->istringstream->ofstreamcout << argv[0] << endl;ifstream is(argv[0],ios_base::binary);ostringstream oss(ios_base::binary);streamsize ss_size = 0;char buf[65];cout << "begin read is" << endl;while(!is.eof()){is.read(buf,64);ss_size = is.gcount();if(ss_size){oss.write(buf,ss_size);}}cout << "end read is" << endl;istringstream iss(oss.str(),ios_base::binary);iss.seekg(0,ios_base::beg);string str_path(argv[0]);str_path.append(".bak");ofstream ioo(str_path.c_str(),ios_base::binary);cout << "start read iss" << endl;while(!iss.eof()){iss.read(buf,64);ss_size = iss.gcount();if(ss_size){ioo.write(buf,ss_size);}}cout << "end read iss" << endl;return 0;}
输出:
C:\Users\apple\Desktop>test_ifstream.exestr_size: 40241stream size: 4test_ifstream.exebegin read isend read isstart read issend read iss
0 0
- [C/C++标准库]_[中级]_[使用stringstream作为内存流读取]
- [C/C++标准库]_[初级]_[使用string stream]
- [libxml2]_[C/C++]_[使用libxml2读取内存的xml片段]
- C语言_标准库
- [C/C++标准库]_[初级]_[C++ iostream read getline 读取文件慢的原因]
- [C/C++标准库]_[初级]_[使用freopen重定向标准输出]
- [C/C++标准库]_[初级]_[查找内存数据中的指定值]
- [C/C++]_[中级]_[使用智能指针的方式释放malloc出来的堆空间]
- [C/C++]_[中级]_[数据地址对齐]
- C++_标准模板库(STL)
- c++_标准库类型string
- C++_标准库类型_string
- C++_标准库类型_vector
- C语言_标准I/O库
- [C++][基础]5_标准库类型
- [C/C++标准库]_[初级]_[使用时间库]
- [C/C++标准库]_[初级]_[signal信号浅析]
- [C/C++标准库]_[初级]_[集合操作]
- how javascript loading works
- Qt获取网络时间
- MySQL 中group by的实现
- oj-4-复数运算的承载
- 如何得到泛型的代表的实际参数
- [C/C++标准库]_[中级]_[使用stringstream作为内存流读取]
- 制作霜冻冰雪文字效果
- STL deque的使用
- Got error: getaddrinfo ENOTFOUND;Cannot GET
- 如何打造vim风格eclipse界面
- Symbolic Toolbox 表达式化简与数值转换
- Dragon之BillingServer
- OLE Automation For Richtext Format to send mail from VFP to Lotus Notes
- struts2使用json传数据的例子