zoukankan      html  css  js  c++  java
  • 鲜为人知的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;

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

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

      

  • 相关阅读:
    CB文件读入后输出中文乱码问题
    2019-ICPC-沈阳站打铁感想
    计蒜客习题:画图游戏(Havel-Hakimi定理)
    计蒜客练习题:接龙(带权并查集)
    搜索----Dungeon Master
    最短路 poj1502 MPI Maelstrom
    poj 3259 Wormholes
    Silver Cow Party
    Til the Cows Come Home
    Cow Contest
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3200979.html
Copyright © 2011-2022 走看看