C++ 从 istream 中读取二进制数据

c++ read binary data from 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);
}

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

示例:

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

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