В любом случае, чтобы прочитать известное количество байтов, непосредственно в std::string, без создания временного буфера для этого?
Например, в настоящее время я могу сделать это с помощью
boost::uint16_t len;
is.read((char*)&len, 2);
char *tmpStr = new char[len];
is.read(tmpStr, len);
std::string str(tmpStr, len);
delete[] tmpStr;