Поток является входом и выходом двоичных данных.
StringBuilder - это средство создания текста данных.
Помимо этого, существует проблема состояния - StringBuilder просто имеет текущее значение, без понятия «позиция». Это позволяет вам получать доступ и изменять данные в любом месте. Поток, с другой стороны, является логически потенциально бесконечным потоком данных, с курсором где-то посередине, чтобы сказать, куда вам нужно. Как правило, вы просто читаете / пишете вперед, используя Seek / Position для перехода к определенной части потока данных.
Попробуйте представить реализацию Stream API с помощью StringBuilder ... он просто не подходит. Вы могли бы отсортировать этого, но в итоге вы получите StringReader и StringWriter.