2011-02-10 5 views
65

Вопрос:FileStream vs/difference StreamWriter?

Что отличает FileStream от StreamWriter в dotnet?

В каком контексте вы собираетесь его использовать? В чем их преимущество и недостаток?

Возможно ли комбинировать эти два в одном?

ответ

79

Что отличает FileStream от StreamWriter в dotnet?

A FileStream является Stream. Как и все потоки, он использует только данные byte[].

A StreamWriter : TextWriter, является потолочным декоратором. TextWriter кодирует текстовые данные, такие как строка или char, в byte[], а затем записывает их в связанный Stream.

Какой контекст вы предполагаете использовать? В чем их преимущество и недостаток?

Вы используете голый FileStream, когда у вас есть данные byte[]. Вы добавляете StreamWriter, когда хотите написать текст. Используйте Formatter или Serializer для записи более сложных данных.

Возможно ли комбинировать эти два в одном?

Да. Для создания StreamWriter вам всегда нужен Stream. Вспомогательный метод System.IO.File.CreateText("path") создаст их в сочетании, а затем вам придется только Dispose() использовать внешний писатель.

+1

Также важно отметить, что 'FileStream' - это тип потока, специально предназначенный для файлов. Потоки изначально работают с байтами, однако 'StreamWriter'/Reader будет писать/читать текст на * любом * потоке, а не только на FileStream's. Например, «MemoryStreams», «NetworkStreams» и т. Д. – iliketocode

18

FileStream пишет байты, StreamWriter пишет текст. Это все.

+11

Собственно, это не «все» ... Но это одно правильное различие. – David

14

FileStream явно предназначен для рабочих файлов.

StreamWriter может использоваться для потоковой передачи любого типа Stream - сетевые сокеты, файлы и т.д.

ScottGu объясняет различные объекты Потока довольно красиво здесь: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

+1

Отличная ссылка для потоков, хотя она не охватывает потоки R/W случайного доступа. Особенно полезны сведения о сериализации/десериализации и демонстрация потоков без файлов. +1 – ThunderGr

7

Ну, из MSDN для FileStream :

Предоставляет поток вокруг файла, поддерживающий синхронные и асинхронные операции чтения и записи.

и MSDN для StreamWriter:

Реализует TextWriter для написания символов в поток в определенной кодировке.

Наиболее очевидная разница в том, что FileStream позволяет операции чтения/записи, в то время как StreamWriter это только для записи.

StreamWriter страница продолжается добавить:

StreamWriter предназначен для вывода символов в определенной кодировке, в то время как классы, полученные из потока предназначены для ввода и вывода байт.

Итак, второе отличие состоит в том, что FileStream для байтов, а StreamWriter - для текста.

5

Это два разных уровня, используемых для вывода информации в известные источники данных.

FileStream - это тип потока, который концептуально является механизмом, который указывает на какое-либо местоположение и может обрабатывать входящие и/или исходящие данные в и из этого местоположения. Существуют потоки для чтения/записи файлов, сетевых подключений, памяти, труб, консоли, отладочных и трассировщиков и нескольких других типов источников данных. В частности, FileStream существует для выполнения чтения и записи в файловую систему. Большинство потоков довольно низкого уровня в их использовании и обрабатывают данные как байты.

StreamWriter - это оболочка для потока, которая упрощает использование этого потока для вывода простого текста. Он предоставляет методы, которые берут строки вместо байтов, и выполняет необходимые преобразования в байт-массивы и из них. Есть и другие писатели; другой основной, который вы будете использовать, это XmlTextWriter, который облегчает запись данных в формате XML. Есть также Читатели-коллеги для писателей, которые аналогичным образом обертывают поток и облегчают вывод данных.

0

Одно ключевое различие (в дополнение к приведенным выше комментариям) может заключаться в том, что FileStream поддерживает случайный доступ к диску и считывает любой файл FileStream.Position. Для больших изменений файлов это может быть неоценимым.

Смежные вопросы