c 流緩衝學習 rdbuf

2021-04-23 05:11:56 字數 1412 閱讀 8079

摘自:http://blog.csdn.net/freedom0203/archive/2008/08/21/2807210.aspx

我們使用stl程式設計的時候有時候會想到把乙個流物件指向的內容用另乙個流物件來輸出,比如想把乙個檔案的內容輸出到顯示器上,我們可以用簡單的兩行**就可以完成。

ifstream infile("test.txt");

cout << infile.rdbuf();

上面的**就把infile流物件中的流重定向到標準輸出cout上,您可以在螢幕上看到test.txt的內容。

下面的例子來自msdn,清晰的描述了rdbuf函式的使用方法

// basic_ios_rdbuf.cpp

// compile with: /ehsc

#include #include #include int main( )

rdbuf函式有兩種呼叫方法

basic_streambuf*rdbuf( ) const;
basic_streambuf*rdbuf(basic_streambuf*_sb);
1)無引數。返**用者的流緩衝指標。

2)引數為流緩衝指標。它使呼叫者與引數(流緩衝指標)關聯,返回自己當前關聯的流緩衝區指標。

假如我們用c語言寫乙個檔案複製程式,比如乙個***檔案,我們首先考慮的是c語言的檔案輸入輸出功能,其思路是建乙個指定大小緩衝區,我們從原始檔中迴圈讀取緩衝區大小的資料,然後寫進目的檔案。而在c++中,我們拋棄了這種用字元緩衝區的按位元組複製的方法,因為這種方法看起來很繁瑣,而且效率一點也不高。下面可以對比這兩種方法(程式可以直接執行): c:

#include

#include

int main()

if((pf2 = fopen("2.***","wb")) == null)

while(fread(buf,1,256,pf1), !feof(pf1))

fclose(pf1);

fclose(pf2);

return 0; }

在c++中:

#include

#include

using namespace std;

int main()

fstream fout("2.***",ios::out|ios::binary);

if(! fin.is_open())

fout<

看起來是不是清晰多了呢,這就是c++中的流緩衝的威力了,程式通過把原始檔的流重定向到關聯到目的檔案的流物件,通過 fout<

c 流緩衝學習 rdbuf

我們使用stl程式設計的時候有時候會想到把乙個流物件指向的內容用另乙個流物件來輸出,比如想把乙個檔案的內容輸出到顯示器上,我們可以用簡單的兩行 就可以完成。ifstream infile test.txt cout infile.rdbuf 上面的 就把infile流物件中的流重定向到標準輸出cou...

c 流緩衝學習 rdbuf

我們使用stl程式設計的時候有時候會想到把乙個流物件指向的內容用另乙個流物件來輸出,比如想把乙個檔案的內容輸出到顯示器上,我們可以用簡單的兩行 就可以完成 1 ifstream infile test.txt 2 cout infile.rdbuf 上面的 就把infile流物件中的流重定向到標準輸...

C 中rdbuf 簡介及檔案流的概念

include include include include using namespace std 個人對流操作中 和 符號的理解 可以這麼認為 可以根據 或 箭頭的方向來理解流的過程.比如 cout n 來說由於 箭頭方向向右,所以意思就是將cin中的資料 流入n變數,cin是標準輸入流,所以...