C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 多字節操作
一些未格式化 IO 操作一次處理大塊數據,這些操作要求我們自己分配并管理用來保存和提取數據的字符數組
| is.get(sink, size, delim) | 從is中讀取最多size個字節,并保存在字符數組中,字符數組的起始地址由sink給出。讀取過程直到遇到字符delim或讀取了size個字節或遇到文件尾時停止。如果遇到了delim,則將其留在輸入流中,不讀取出來存入sink。 |
| is.getline(sink, size, delim) | 與接收三個參數的get版本類似,但會讀取并丟棄delim。 |
| is.read(sink, size) | 讀取最多size個字節,存入字符數組sink中。返回is。 |
| is.gcount() | 返回上一個未格式化讀取從is讀取的字節數 |
| os.write(source, size) | 將字符數組source中的size個字節寫入os。返回os。 |
| is.ignore(size, delim) | 讀取并忽略最多size個字符,包括delim。與其他未格式化函數不同,ignore有默認參數:size默認值是1,delim的默認值為文件尾。 |
注意:一般情況下,主張使用標準庫提供的高層抽象,低層函數容易出錯。
1.1 get vs getline
相同:接受相同的參數, 它們的行為類似但不相同。在兩個函數中, 返回參數都是一個 char 數組, 用來保存數據。 兩個函數都一直讀取數據, 直至下面條件之一發生:
? 已讀取了 size-1個字符
? 遇到了文件尾
? 遇到了分隔符
差別
處理分隔符的方式(無論哪個函數都不會將分隔符保存在 sink 中)
- get 將分隔符留作 istream 中的下一個字符
- getline 則讀取并丟棄分隔符。
1.2 gcount
應該在任何后續未格式化輸入操作之前調用 gcount。 特別是將字符退回流的單字符操作也屬于未格式化輸入操作。 如果在調用 gcount 之前調用了 peek、 unget 或 putback, 則 gcount 的返回值為 0
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha