这些功能有什么区别.当我使用它们时,它们都做同样的事情.例如,所有三个调用都返回"hello":
#include <iostream>
#include <sstream>
int main()
{
stringstream ss("hello");
char x[10] = {0};
ss.read(x, sizeof(x)); // #1
std::cout << x << std::endl;
ss.clear();
ss.seekg(0, ss.beg);
ss.readsome(x, sizeof(x)); // #2
std::cout << x << std::endl;
ss.clear();
ss.seekg(0, ss.beg);
ss.get(x, sizeof(x)); // #3
std::cout << x;
ss.clear();
ss.seekg(0, ss.beg);
ss.getline(x, sizeof(x)); // #4
std::cout << x << std:endl;
}
Run Code Online (Sandbox Code Playgroud)
Roo*_*ook 20
get和参数调用getline时非常相似.但是,从流中读取直到找到分隔符,然后将其留在那里.相比之下,将分隔符从流中拉出,但随后将其删除.它不会被添加到它填充的缓冲区中.get( char_type* s, std::streamsize count )getgetline
get查找\n,并且当参数中提供特定数量的字符(例如count)时,它将count - 1在停止之前读取字符.read将拉入所有count这些.
您可以设想read对二进制数据源采取适当的操作,读取特定数量的字节.get当你正在读取一个你想要以null结尾的字符串,并且像换行符这样的东西具有有用的句法意义来分割文本时,它会更适合于文本流.
readsome只返回底层缓冲区中立即可用的字符,这有点模糊不清并且特定于实现.例如,这可能包括使用返回到流的字符putback.事实上,您无法看到它们之间的区别read,readsome只是表明两者可能共享您正在使用的特定流类型和库的实现.
我观察了闪存文件系统之间read()和之间的区别readsome().
底层流读取8k块,该read方法将用于下一个块以满足调用者,而readsome允许该方法返回少于请求,以避免花费时间获取下一个块.
| 归档时间: |
|
| 查看次数: |
7520 次 |
| 最近记录: |