read,readsome,get和getline之间有什么区别?

use*_*677 14 c++

这些功能有什么区别.当我使用它们时,它们都做同样的事情.例如,所有三个调用都返回"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只是表明两者可能共享您正在使用的特定流类型和库的实现.


qua*_*ana 7

我观察了闪存文件系统之间read()和之间的区别readsome().

底层流读取8k块,该read方法将用于下一个块以满足调用者,而readsome允许该方法返回少于请求,以避免花费时间获取下一个块.