std::basic_istream<CharT,Traits>::read
来自 cppreference.com
< cpp | io | basic istream
basic_istream& read( char_type* s, std::streamsize count ); |
||
从流中提取字符。
行为类似于 UnformattedInputFunction。在构造和检查哨兵对象后,提取字符并将其存储到以 s 指向的字符数组的连续位置。提取和存储字符,直到以下任一条件发生:
- 提取并存储了 count 个字符。
- 输入序列中出现文件结束条件(在这种情况下,将调用 setstate(failbit|eofbit))。可以使用 gcount() 查询成功提取的字符数量。
内容 |
[编辑] 参数
s | - | 指向用于存储字符的字符数组的指针 |
count | - | 要读取的字符数 |
[编辑] 返回值
*this
[编辑] 异常
如果内部操作抛出异常,则会捕获该异常并设置 badbit。如果 exceptions() 为 badbit
设置,则会重新抛出异常。
[编辑] 说明
当使用非转换区域设置(默认区域设置是非转换的)时,std::basic_ifstream 中此函数的重写器可能针对零拷贝批量 I/O 进行了优化(通过重写 std::streambuf::xsgetn)。
[编辑] 示例
运行此代码
#include <cstdint> #include <fstream> #include <iostream> #include <sstream> #include <string> int main() { // read() is often used for binary I/O std::string bin = {'\x12', '\x12', '\x12', '\x12'}; std::istringstream raw(bin); std::uint32_t n; if (raw.read(reinterpret_cast<char*>(&n), sizeof n)) std::cout << std::hex << std::showbase << n << '\n'; // prepare file for next snippet std::ofstream("test.txt", std::ios::binary) << "abcd1\nabcd2\nabcd3"; // read entire file into string if (std::ifstream is{"test.txt", std::ios::binary | std::ios::ate}) { auto size = is.tellg(); std::string str(size, '\0'); // construct string to stream size is.seekg(0); if (is.read(&str[0], size)) std::cout << str << '\n'; } }
输出
0x12121212 abcd1 abcd2 abcd3
[编辑] 参见
插入字符块 ( std::basic_ostream<CharT,Traits> 的公有成员函数) | |
提取格式化数据 (公有成员函数) | |
提取已可用的字符块 (公有成员函数) | |
提取字符 (公有成员函数) | |
提取字符,直到找到给定字符 (公有成员函数) | |
从文件中读取 (函数) |