读取、读取、获取和获取行之间有什么区别?
What's the difference between read, readsome, get, and getline?
这些函数的区别是什么?当我使用它们时,它们都做同样的事情。例如,所有三个调用都返回"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 )
,则get
与getline
非常相似。但是,get
从流中读取,直到找到分隔符,然后将留在。相比之下,getline
将从流中取出分隔符,但随后将其删除。它不会被添加到它所填充的缓冲区中。
get
查找n
,当参数中提供了特定数量的字符(例如count
)时,它将在停止之前读取最多count - 1
个字符。read
将会拉入count
的所有成员
您可以设想read
是对二进制数据源的适当操作,读取特定数量的字节。get
将更适合于文本流,当你读到一个字符串,你希望以空结束,并且像换行符这样的东西有有用的语法意义拆分文本。
readsome
只返回在底层缓冲区中立即可用的字符,这有点模糊,并且特定于实现。例如,这可能包括使用putback
返回到流的字符。您无法看到read
和readsome
之间的区别,这一事实只是表明它们可能在您正在使用的特定流类型和库上共享一个实现。
我观察了flash文件系统中read()
和readsome()
的区别。
底层流读取8k块,read
方法将读取下一个块以满足调用者,而readsome
方法允许返回少于请求的值,以避免花费时间获取下一个块。
get()和getline()的主要区别在于get()将换行符留在输入流中,使其成为下一个输入操作看到的第一个字符,而getline()则从输入流中提取并丢弃换行符。
相关文章:
- 从格式化输入操作中获取读取字符数
- 使用源读取器从网络摄像头源获取 H264 样本
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- C++ gmock - 我们如何在单元测试 cpp 文件中读取/获取 cpp 文件函数的参数值
- 获取要从文本文件中读取的行
- 通过读取 MFT C++(如 TreeSize)来获取目录大小
- 这个针对单个写入器 + 读取器的发布/检查更新类是否可以使用 memory_order_relaxed 或获取/发布以提
- 如何在读取时获取套接字流的位置
- 在C J2ME中读取Excel文件,并从ITQ获取数据
- 无法获取哨兵值以读取多个 CIN 输入?
- 如何以块的形式读取数据,然后从中获取某些数据
- 使用 boost::asio 读取 JSON 流,获取完整字符串
- 使用C 中的RWCString读取文本文件时获取rwboundserr
- 调用基构造函数时遇到问题 - 获取读取访问冲突
- Qt - 为什么无法使用 QFile 读取文件,其中包含从 FileDialog 获取的目录
- 读取 STDIN 时如何获取 llvm::MemoryBuffer 的内容?
- 在常量引用获取器上读取写入互斥锁(使用 Qt)
- 获取无效或损坏的文件LNK1107:尝试链接 OpenSceneGraph 教程.dll时无法0x378读取
- openCV读取.avi文件的视频捕获获取空框架
- 将数据从数据读取器终端获取到GUI(QtCreator)