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 пишет текст. Вот и все.


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.Позиция. Для больших модификаций файлов это может быть бесценно.