FileStream vs / различия StreamWriter?
вопрос:
чем отличается FileStream от StreamWriter в dotnet?
какой контекст вы должны использовать? В чем их преимущество и недостаток?
можно ли объединить эти два в один?
6 ответов
чем отличается FileStream от StreamWriter в dotnet?
A FileStream
Это Stream
. Как и все потоки, он имеет дело только с byte[]
данные.
A StreamWriter : TextWriter
, является поток-декоратор. TextWriter кодирует текстовые данные, такие как string или char в byte[]
а затем записывает его в связанный Stream
.
какой контекст вы должны использовать? В чем их преимущество и недостаток?
вы используете голый FileStream, когда у вас есть byte[]
данные. Добавить StreamWriter
если вы хотите написать текст. Используйте форматер или сериализатор для записи более сложных данных.
можно ли объединить эти два в один?
да. Вам всегда нужен поток для создания StreamWriter. Вспомогательный метод System.IO.File.CreateText("path")
создаст их в комбинации, а затем вам нужно будет только Dispose () внешний писатель.
FileStream явно предназначен для рабочих файлов.
StreamWriter может использоваться для потока в любой тип поток - сетевые сокеты, файлы и т. д.
ScottGu объясняет различные объекты потока довольно хорошо здесь:http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Ну, из MSDN для FileStream
:
предоставляет Stream в файл, поддерживающий синхронные и асинхронные операции чтения и записи.
и MSDN для StreamWriter
:
реализует textwriter для записи символов в поток в определенной кодировке.
самая очевидная разница в том, что FileStream
позволяет осуществлять операции чтения/записи, в то время как StreamWriter
это пишут только.
на StreamWriter
страница продолжает добавлять:
StreamWriter предназначен для вывода символов в определенной кодировке, тогда как классы, производные от Stream, предназначены для ввода и вывода байтов.
Итак, вторая разница в том, что FileStream
для байтов, в то время как StreamWriter
для текста.
Это два разных уровня, используемых для вывода информации в известные источники данных.
FileStream - это тип потока, который концептуально является механизмом, указывающим на некоторое местоположение и может обрабатывать входящие и/или исходящие данные В и из этого местоположения. Существуют потоки для чтения / записи в файлы, сетевые подключения, память, каналы, консоль, прослушиватели отладки и трассировки и несколько других типов источников данных. В частности, FileStream существует для выполнения чтения и запись в файловую систему. Большинство потоков довольно низкоуровневые в своем использовании и имеют дело с данными в виде байтов.
StreamWriter-это оболочка для потока, которая упрощает использование этого потока для вывода простого текста. Он предоставляет методы, которые принимают строки вместо байтов, и выполняет необходимые преобразования в и из байтовых массивов. Есть и другие авторы; другой основной, который вы бы использовали, - XmlTextWriter, который облегчает запись данных в формате XML. Есть также читатель аналоги авторы, которые аналогичным образом обернуть поток и облегчить получение данных обратно.
одно ключевое отличие (в дополнение к приведенным выше комментариям) может заключаться в том, что FileStream поддерживает случайное чтение и запись на диск в любой указанный FileStream.Позиция. Для больших модификаций файлов это может быть бесценно.