首页 > 解决方案 > c++ 从 istream 读取二进制数据

问题描述

我有一个 istream,我必须将它读入缓冲区。遇到 eof 后,我找不到找出 read_len 的方法吗?我不能使用 get 因为我的文件没有分隔符。

似乎唯一的选择就是逐字阅读,真的是唯一的选择吗?

char buffer[128];
while(is.good()) {
     is.read(buffer, sizeof(buffer));
     size_t read_len = sizeof(buffer);
     if (is.eof()) {
         read_len = xxxx;
     }
     process(buffer, read_len);
}

标签: c++binary-dataistream

解决方案


您可以检查istream::gcount()哪个“返回上次未格式化输入操作提取的字符数”。

例子:

    while(is) {
         is.read(buffer, sizeof buffer);
         auto read_len = is.gcount();  // <- 
         if(read_len > 0)
             process(buffer, read_len);
         else
             break;
    }

您也可以使用istream::readsome()- 但请注意:“此函数的行为是高度特定于实现的。 ”这可能是也可能不是问题。


推荐阅读