Почему класс StringBuilder не наследуется от Stream?

StackOverflow https://stackoverflow.com/questions/496472

  •  20-08-2019
  •  | 
  •  

Вопрос

Мне просто любопытно узнать об этом.Меня поражает, что поведение StringBuilder функционально (если не технически) такое же, как у потока - это ячейка данных, к которой могут быть добавлены другие данные.

Опять же, просто любопытно.

Это было полезно?

Решение

Поток - это ввод и вывод бинарный данные.

StringBuilder - это средство создания текст данные.

Помимо этого, существует проблема состояния - StringBuilder просто имеет текущее значение, без понятия о "позиции".Это позволяет вам получать доступ к данным и изменять их в любом месте внутри него.Поток, с другой стороны, логически представляет собой потенциально бесконечный поток данных, с курсором где-то посередине, чтобы указать, куда вам нужно.Обычно вы просто читаете / записываете вперед, используя Seek / Position для перехода к определенной части потока данных.

Попробуйте представить реализацию Stream API с помощью StringBuilder...это просто не подходит.Ты мог бы сортировать of сделайте это, но в итоге вы получите StringReader и StringWriter, в основном.

Другие советы

StringBuilder имеет больше, чем просто функции добавления.Он также имеет функции вставки, что неестественно для потока.Используйте StringWriter класс, если вам нужен поток, который обертывает StringBuilder.

Поток обычно ссылается на внешний источник ввода/вывода (файл, сеть).StringBuilder не имеет такой характеристики.

Потому что на самом деле это не ручей.Это скорее буфер, который растет.

Хотя к обоим могут быть добавлены данные, функциональность в целом отличается.

Поток предназначен для ввода или вывода данных из / в какой-либо источник, а не для создания чего-либо.StringBuilder не нуждается в функциональности, предоставляемой Stream, такой как буферизация и т.д., Для создания ресурса.

С другой стороны, вы найдете классы Средство чтения строк/Писатель в System.IO.В Строковый писатель например ,орудия труда Автор текста против лежащего в основе Строковый конструктор.

Лично я никогда им не пользовался, но если у вас есть процедура записи текстового файла, вы могли бы заставить его работать против Автор текста.Затем в вашем тесте, вместо создания экземпляра Потоковый писатель вы создаете экземпляр Строковый писатель и затем вы могли бы проверить, что было написано, посмотрев на лежащий в основе Строковый конструктор.

Теперь у меня кружится голова...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top