命名空间
变体
操作

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

[编辑] 异常

失败 如果发生错误(错误状态标志不是 goodbit)并且 exceptions() 设置为对此状态抛出异常。

如果内部操作抛出异常,则会捕获该异常并设置 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> 的公有成员函数) [编辑]
提取格式化数据
(公有成员函数) [编辑]
提取已可用的字符块
(公有成员函数) [编辑]
提取字符
(公有成员函数) [编辑]
提取字符,直到找到给定字符
(公有成员函数) [编辑]
从文件中读取
(函数) [编辑]