读取、读取、获取和获取行之间有什么区别?

What's the difference between read, readsome, get, and getline?

本文关键字:读取 获取 区别 什么 之间      更新时间:2023-10-16

这些函数的区别是什么?当我使用它们时,它们都做同样的事情。例如,所有三个调用都返回"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;
}

当调用get时,参数为( char_type* s, std::streamsize count ),则getgetline非常相似。但是,get从流中读取,直到找到分隔符,然后将留在。相比之下,getline将从流中取出分隔符,但随后将其删除。它不会被添加到它所填充的缓冲区中。

get查找n,当参数中提供了特定数量的字符(例如count)时,它将在停止之前读取最多count - 1个字符。read将会拉入count的所有成员

您可以设想read是对二进制数据源的适当操作,读取特定数量的字节。get将更适合于文本流,当你读到一个字符串,你希望以空结束,并且像换行符这样的东西有有用的语法意义拆分文本。

readsome只返回在底层缓冲区中立即可用的字符,这有点模糊,并且特定于实现。例如,这可能包括使用putback返回到流的字符。您无法看到readreadsome之间的区别,这一事实只是表明它们可能在您正在使用的特定流类型和库上共享一个实现。

我观察了flash文件系统中read()readsome()的区别。

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

get()和getline()的主要区别在于get()将换行符留在输入流中,使其成为下一个输入操作看到的第一个字符,而getline()则从输入流中提取并丢弃换行符。