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;

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

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

      

  • 相关阅读:
    PriorityQueue详解
    Queue介绍
    Dubbo面试踩坑
    Java中Integer和ThreadLocal
    Java中Deque特性及API
    由ubuntu装好想到的
    双系统试水上岸
    终于意识到BIM确实火了
    读阿里机器学习平台的一些总结
    继续ubuntu和遇到的easybcd的坑
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3200979.html
Copyright © 2011-2022 走看看