in_avail
- это количество символов, готовых для чтения из буфера, а не размер самого буфера. Здесь действительно разрешено возвращать любое ненулевое значение.
Однако я не могу ответить, как лучше всего поступать, потому что я не знаю, что ты делаешь. Если у вас уже есть вещи в виде массива unsigned char
, то вы захотите сделать:
std::vector<unsigned char> data(array, array + sizeof(array)/sizeof(unsigned char));
Если вы просто пытаетесь прочитать весь поток в векторе, то я бы сделал именно то, что вы делаете; Я бы просто заменил вашу функцию stream2vector на эту, эквивалентную, более простую:
// extracts everything from the stream
std::vector<unsigned char> stream2vector(std::basic_istream<unsigned char>& stream)
{
std::istreambuf_iterator<unsigned char> it(stream);
const std::istreambuf_iterator<unsigned char> endOfStream;
return std::vector<unsigned char>(it, endOfStream);
}
Я не совсем уверен, почему вы специализируете здесь каждую операцию для unsigned char
- я бы просто использовал версии char
по умолчанию, потому что unsigned char
может быть такого же размера, как short
, что, вероятно, не то, что вы хотите (но я не знаю ни одной реализации, которая делает это).