Правильно сделать - и то, что Guava пытается подтолкнуть вас к выполнению, - это изменить код, который дает вам InputStream, чтобы вместо него дать InputSupplier.
Причина этого в том, что таким образом Guava получает поток, читает строку и закрывает ее, и вы не можете случайно использовать ее после того, как Guava закрыл ее, потому что у вас никогда не было ссылки на InputStream в первом место. Это устраняет много потенциальных ошибок.
Другая перегрузка, CharStreams.toString (Readable), не закрывает Readable. Если вы хотите иметь свою собственную специальную логику для закрытия входного потока, это способ, которым Guava позволяет вам сделать это.
Эквивалент гуавы для IOUtils.toString (InputStream) говорит, что это лучше, чем я мог.