鲜为人知的C++ IO fstream流
?注:圖片來自于博客 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;驚奇發現寫入和讀出都行,只是在寫完之后讀取的時候將文件指向開始。 最后我的問題如愿解決。
深思:只考慮線程間使用管道通信。這個類有管道的特性。又有管道所不具備的優勢。只要做好同步 ?一個線程寫數據(文件末尾)?, 一個線程讀數據(文件開始),讀取時候可以檢查數據的完整性在做讀取操作,因為是文件所以數據不會丟失,不像管道讀取之后數據丟失。 所以在線程間通信尤其數據量大的時候我覺得可以采用該類。?
?
?
?
轉載于:https://www.cnblogs.com/wolfrickwang/p/3200979.html
總結
以上是生活随笔為你收集整理的鲜为人知的C++ IO fstream流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Response 输出文件流过程中的等待
- 下一篇: getopt( )和 getopt_lo