Если бы я хотел 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, чтобы выяснить, находится ли указатель get istream
в конце потока, я делаю это :
bool at_eof( std::istream &is )
{
return available( is ) == 0;
}
Мой вопрос:
Есть ли лучший способ получить количество доступных байтов из istream
? Если не в стандартной библиотеке, то в boost, возможно?