如果我想要将
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()不是一个非常有用的函数,所以为了找出istream
的获取指针是否在流的末尾,我正在这样做:
bool at_eof( std::istream &is )
{
return available( is ) == 0;
}
我的问题:
有没有更好的方法从istream
中获取可用字节数?如果标准库中没有,那么在boost库中呢?
sstream << stream.rdbuf();
这种优雅而且相当快的方式,尽管不是最快的)。 - Jerry Coffin