Почему класс StringBuilder не наследуется от Stream?
-
20-08-2019 - |
Вопрос
Мне просто любопытно узнать об этом.Меня поражает, что поведение StringBuilder функционально (если не технически) такое же, как у потока - это ячейка данных, к которой могут быть добавлены другие данные.
Опять же, просто любопытно.
Решение
Поток - это ввод и вывод бинарный данные.
StringBuilder - это средство создания текст данные.
Помимо этого, существует проблема состояния - StringBuilder просто имеет текущее значение, без понятия о "позиции".Это позволяет вам получать доступ к данным и изменять их в любом месте внутри него.Поток, с другой стороны, логически представляет собой потенциально бесконечный поток данных, с курсором где-то посередине, чтобы указать, куда вам нужно.Обычно вы просто читаете / записываете вперед, используя Seek / Position для перехода к определенной части потока данных.
Попробуйте представить реализацию Stream API с помощью StringBuilder...это просто не подходит.Ты мог бы сортировать of сделайте это, но в итоге вы получите StringReader и StringWriter, в основном.
Другие советы
StringBuilder
имеет больше, чем просто функции добавления.Он также имеет функции вставки, что неестественно для потока.Используйте StringWriter
класс, если вам нужен поток, который обертывает StringBuilder
.
Поток обычно ссылается на внешний источник ввода/вывода (файл, сеть).StringBuilder не имеет такой характеристики.
Потому что на самом деле это не ручей.Это скорее буфер, который растет.
Хотя к обоим могут быть добавлены данные, функциональность в целом отличается.
Поток предназначен для ввода или вывода данных из / в какой-либо источник, а не для создания чего-либо.StringBuilder не нуждается в функциональности, предоставляемой Stream, такой как буферизация и т.д., Для создания ресурса.
С другой стороны, вы найдете классы Средство чтения строк/Писатель в System.IO.В Строковый писатель например ,орудия труда Автор текста против лежащего в основе Строковый конструктор.
Лично я никогда им не пользовался, но если у вас есть процедура записи текстового файла, вы могли бы заставить его работать против Автор текста.Затем в вашем тесте, вместо создания экземпляра Потоковый писатель вы создаете экземпляр Строковый писатель и затем вы могли бы проверить, что было написано, посмотрев на лежащий в основе Строковый конструктор.
Теперь у меня кружится голова...