gpt4 book ai didi

c++ - 我如何找出 std::istream 中有多少字节可用?

转载 作者:可可西里 更新时间:2023-11-01 16:38:59 28 4
gpt4 key购买 nike

如果我想read()一个std::istream的内容到一个缓冲区,我必须先找出有多少数据可用知道缓冲区有多大。为了从 istream 中获取可用字节数,我目前正在做这样的事情:

std::streamsize available( std::istream &is )
{
std::streampos pos = is.tellg();
is.seekg( 0, std::ios::end );
std::streamsize len = is.tellg() - pos;
is.seekg( pos );
return len;
}

同样,由于 std::istream::eof() 不是一个非常有用的基金 AFAICT,要查明 istream 的获取指针是否在流的末尾,我这样做:

bool at_eof( std::istream &is )
{
return available( is ) == 0;
}

我的问题:

是否有更好的方法从 istream 获取可用字节数?如果不在标准库中,也许在 boost 中?

最佳答案

对于 std::cin,您无需担心缓冲,因为它已经缓冲过了——而且您无法预测用户按下了多少键。

对于打开的二进制std::ifstream,也被缓冲,你可以调用seekg(0, std::ios:end)tellg () 方法来确定有多少字节。

阅读后也可以调用gcount()方法:

char buffer[SIZE];

while (in.read(buffer,SIZE))
{
std::streamsize num = in.gcount();
// call your API with num bytes in buffer
}

对于通过 std::getline(inputstream, a_string) 读取文本输入并随后分析该字符串可能很有用。

关于c++ - 我如何找出 std::istream 中有多少字节可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com