C++標準庫-15-Stream Buffer類
Reading and writing are not done by the streams directly but are delegated to stream buffers.
-
通過stream.rdbuf()可以返回一個指向stream buffer的指針;
-
stream的構造函數和rdbuf(streambuf*)成員函數都可以接收一個指向stream buffer的指針,通過該指針可以設置該stream的buffer。
Stream Buffer的接口
寫字符成員函數
-
sputc(c):
-
sputn(s,n):
讀字符的成員函數
-
in_avail()
-
sgetc()
-
sbumpc()
-
snextc()
-
sgetn(b,n)
-
sputbackc(c)
-
sungetc()
其他成員函數
-
pubimbue(loc):給stream buffer設置locale對象loc,並返回之前的locale對象;
-
getloc():返回當前的locale對象;
-
pubseekpos(pos):移動當前位置至pos;
-
pubseekpos(pos,which)
-
pubseekoff(offset,rpos):移動當前位置到相對位置;
-
pubseekoff(offset,rpos,which)
-
pubsetbuf(buf,n);
offset是相對位置,rpos可以取值爲ios_base::cur、ios_base::beg或者ios_base::end。
Stream Buffer Iterator
Stream Buffer的迭代器有istreambuf_iterator和ostreambuf_iterator兩種,定義在iterator頭文件中。定義一個指向cout的buffer的迭代器代碼如下:
#include <iterator> using namespace std; // 方法-1 std::ostreambuf_iterator<char> bufWriter(cout); // 方法-2 下面的代碼也可以; //std::ostreambuf_iterator<char> bufWriter(cout.rdbuf());
-
istreambuf_iterator的默認構造函數創建的是一個end-of-stream iterator。