new char
не инициализирует память. Он будет заполнен любыми случайными данными, которые были оставлены в этой памяти от предыдущего использования.
Если между двумя вызовами readStream не было других выделений памяти, весьма вероятно, что вы получите буфер, начинающийся с того же адреса.
Тем не менее, у вас есть ошибка, что буфер не завершен 0, и используемый вами конструктор предполагает, что это так. Вам повезло, что у вас не было много других проблем.
Вы можете использовать указанную длину конструктора:
value = string( buffer, size );
Или, если вам нужно было использовать буфер для чего-то, что абсолютно требует 0-терминированного буфера, вы также можете изменить свой код следующим образом:
// Create a new buffer
char* buffer = new char[ size + 1];
// Read the stream
nInputStream.read( buffer, size );
// Add the 0 termination to the end of the string
buffer[size] = '\0';