Как узнать, сколько байтов доступно из std :: istream?

Если бы я хотел 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 ? Если не в стандартной библиотеке, возможно, в ускорении?

9
задан edam 12 July 2011 в 04:46
поделиться