鲜为人知的C++ IO fstream流

C++标准IO库 - 蓝色雪狐 - 平安,幸福美满!

 注:图片来自于博客 http://blog.163.com/hbu_lijian/blog/static/126129153201201710456994/

 

  fstream 中IO对象常用的是iftream(文件输入流) ,ofstream(文件输出流),用来读写文件。

  最近工程中用到socket 接收收据,接收到的数据是一个图像,接收完之后用于打印,由于图像接收完整之后才能打印。 一开始我就想建立一个文件保存数据,等保存完毕之后在打开一个文件,读入数据流然后用于打印。结果发现在大规模的接收文件时候效率很低。

  我在想是否可以既有输入又有输出特性,我想到了管道。但有觉得不合适。我不可能为每一个文件都去建立一个管道。而且管道占用内核空间。自信查看IO发现输入输出双向IO。写测试代码如下:      

    fstream fs;
    fs.open("test.txt",ios::binary|ios::out|ios::in); //|ios::out);
    if (!fs.good())
    {
        return -1;
    }

    char buf[1024] = {"wxr test shuru shu chu liu de hao huai"};

    fs.write(buf,strlen(buf));
    fs.flush();
    char buf2[1024] = {0};

    
    fs.seekg(ios::beg,0);
    fs.read(buf2,strlen(buf));
    fs.close();

    return 0;

  惊奇发现写入和读出都行,只是在写完之后读取的时候将文件指向开始。 最后我的问题如愿解决。  

  深思:只考虑线程间使用管道通信。这个类有管道的特性。又有管道所不具备的优势。只要做好同步  一个线程写数据(文件末尾) , 一个线程读数据(文件开始),读取时候可以检查数据的完整性在做读取操作,因为是文件所以数据不会丢失,不像管道读取之后数据丢失。 所以在线程间通信尤其数据量大的时候我觉得可以采用该类。 

  

 

 

 

posted @ 2013-07-19 17:28  皁仩腄覺  阅读(473)  评论(0编辑  收藏  举报