名稱空間
變體
操作

std::basic_streambuf

來自 cppreference.com
< cpp‎ | io
 
 
 
 
定義於標頭檔案 <streambuf>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_streambuf;

basic_streambuf 類控制字元序列的輸入和輸出。它包含並提供訪問:

  1. 受控字元序列,也稱為緩衝區,其中可能包含用於緩衝輸入操作的輸入序列(也稱為獲取區)和/或用於緩衝輸出操作的輸出序列(也稱為放置區)。
  2. 關聯字元序列,也稱為源(用於輸入)或接收器(用於輸出)。這可以是透過作業系統 API 訪問的實體(檔案、TCP 套接字、序列埠、其他字元裝置),也可以是可解釋為字元源或接收器的物件(std::vectorarraystring literal)。

I/O 流物件 std::basic_istreamstd::basic_ostream,以及所有派生自它們的類(std::ofstreamstd::stringstream 等),都是完全基於 std::basic_streambuf 實現的。

受控字元序列是一個 CharT 陣列,它始終表示關聯字元序列的子序列或“視窗”。其狀態由三個指標描述:

  1. 起始指標,始終指向緩衝區的最低元素。
  2. 下一個指標,指向作為下一個讀寫候選的元素。
  3. 結束指標,指向緩衝區末尾之後一個位置。

basic_streambuf 物件可能支援輸入(此時由起始指標、下一個指標和結束指標描述的緩衝區稱為獲取區)、輸出(放置區),或者同時支援輸入和輸出。在後一種情況下,跟蹤六個指標,它們可能都指向同一個字元陣列的元素,或者指向兩個獨立的陣列。

如果放置區中下一個指標小於結束指標,則存在一個可用的寫入位置。下一個指標可以被解引用並賦值。

如果獲取區中下一個指標小於結束指標,則存在一個可用的讀取位置。下一個指標可以被解引用並讀取。

如果獲取區中下一個指標大於起始指標,則存在一個可用的回推位置,並且下一個指標可以遞減、解引用並賦值,以便將字元回推到獲取區。

受控序列中的字元表示和編碼可能與關聯序列中的字元表示不同,在這種情況下,通常使用 std::codecvt locale facet 來執行轉換。常見的例子是透過 std::wfstream 物件訪問的 UTF-8(或其他多位元組)檔案:受控序列由 wchar_t 字元組成,但關聯序列由位元組組成。

std::basic_streambuf 基類的典型實現只包含六個 CharT* 指標和一份 std::locale 作為資料成員。此外,實現可能保留 locale facet 的快取副本,這些副本在呼叫 imbue() 時會失效。具體緩衝區,如 std::basic_filebufstd::basic_stringbuf,都派生自 std::basic_streambuf

std-streambuf.svg

提供了用於常見字元型別的幾個 typedef

定義於標頭檔案 <streambuf>
型別 定義
std::streambuf std::basic_streambuf<char>
std::wstreambuf std::basic_streambuf<wchar_t>

目錄

[編輯] 成員型別

成員型別 定義
char_type CharT[編輯]
traits_type Traits;如果 Traits::char_type 不是 CharT,則程式格式不正確。[編輯]
int_type Traits::int_type[編輯]
pos_type Traits::pos_type[編輯]
off_type Traits::off_type[編輯]

[編輯] 成員函式

銷燬 basic_streambuf 物件
(虛公共成員函式) [編輯]
區域設定
更改關聯的區域設定並呼叫 imbue()
(公共成員函式) [編輯]
獲取關聯區域設定的副本
(公共成員函式) [編輯]
定位
呼叫 setbuf()
(公共成員函式) [編輯]
呼叫 seekoff()
(公共成員函式) [編輯]
呼叫 seekpos()
(公共成員函式) [編輯]
呼叫 sync()
(公共成員函式) [編輯]
獲取區
獲取獲取區中立即可用的字元數
(公共成員函式) [編輯]
推進輸入序列,然後讀取一個字元而不再次推進
(公共成員函式) [編輯]
(C++17 中移除)
從輸入序列中讀取一個字元並推進序列
(公共成員函式) [編輯]
從輸入序列中讀取一個字元而不推進序列
(公共成員函式) [編輯]
呼叫 xsgetn()
(公共成員函式) [編輯]
放置區
將一個字元寫入放置區並推進下一個指標
(公共成員函式) [編輯]
呼叫 xsputn()
(公共成員函式) [編輯]
回放
將一個字元放回輸入序列
(公共成員函式) [編輯]
將輸入序列中的下一個指標後退一個位置
(公共成員函式) [編輯]

受保護的成員函式

構造 basic_streambuf 物件
(受保護成員函式) [編輯]
(C++11)
替換 basic_streambuf 物件
(受保護成員函式) [編輯]
(C++11)
交換兩個 basic_streambuf 物件
(受保護成員函式) [編輯]
區域設定
[虛擬]
響應關聯區域設定的更改
(虛受保護成員函式) [編輯]
定位
[虛擬]
如果允許,用使用者定義的陣列替換緩衝區
(虛受保護成員函式) [編輯]
[虛擬]
使用相對定址重新定位輸入序列、輸出序列或兩者的下一個指標
(虛受保護成員函式) [編輯]
[虛擬]
使用絕對定址重新定位輸入序列、輸出序列或兩者的下一個指標
(虛受保護成員函式) [編輯]
[虛擬]
將緩衝區與關聯的字元序列同步
(虛受保護成員函式) [編輯]
獲取區
[虛擬]
如果已知,獲取關聯輸入序列中可用於輸入的字元數
(虛受保護成員函式) [編輯]
[虛擬]
從關聯輸入序列中讀取字元到獲取區
(虛受保護成員函式) [編輯]
[虛擬]
從關聯輸入序列中讀取字元到獲取區並推進下一個指標
(虛受保護成員函式) [編輯]
[虛擬]
從輸入序列中讀取多個字元
(虛受保護成員函式) [編輯]
返回獲取區起始、當前字元和結尾的指標
(受保護成員函式) [編輯]
推進輸入序列中的下一個指標
(受保護成員函式) [編輯]
重新定位輸入序列的起始、下一個和結束指標
(受保護成員函式) [編輯]
放置區
[虛擬]
向輸出序列寫入多個字元
(虛受保護成員函式) [編輯]
[虛擬]
從放置區向關聯輸出序列寫入字元
(虛受保護成員函式) [編輯]
返回放置區起始、當前字元和結尾的指標
(受保護成員函式) [編輯]
推進輸出序列的下一個指標
(受保護成員函式) [編輯]
重新定位輸出序列的起始、下一個和結束指標
(受保護成員函式) [編輯]
回放
[虛擬]
將一個字元放回輸入序列,可能會修改輸入序列
(虛受保護成員函式) [編輯]

[編輯] 另請參閱

物件型別,能夠儲存控制 C I/O 流所需的所有資訊
(型別定義) [編輯]
English 日本語 中文(简体) 中文(繁體)