Вопрос:FileStream vs/difference StreamWriter?
Что отличает FileStream от StreamWriter в dotnet?
В каком контексте вы собираетесь его использовать? В чем их преимущество и недостаток?
Возможно ли комбинировать эти два в одном?
Вопрос:FileStream vs/difference StreamWriter?
Что отличает FileStream от StreamWriter в dotnet?
В каком контексте вы собираетесь его использовать? В чем их преимущество и недостаток?
Возможно ли комбинировать эти два в одном?
Что отличает 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() использовать внешний писатель.
FileStream пишет байты, StreamWriter пишет текст. Это все.
Собственно, это не «все» ... Но это одно правильное различие. – David
FileStream явно предназначен для рабочих файлов.
StreamWriter может использоваться для потоковой передачи любого типа Stream - сетевые сокеты, файлы и т.д.
ScottGu объясняет различные объекты Потока довольно красиво здесь: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Отличная ссылка для потоков, хотя она не охватывает потоки R/W случайного доступа. Особенно полезны сведения о сериализации/десериализации и демонстрация потоков без файлов. +1 – ThunderGr
Ну, из MSDN для FileStream
:
Предоставляет поток вокруг файла, поддерживающий синхронные и асинхронные операции чтения и записи.
и MSDN для StreamWriter
:
Реализует TextWriter для написания символов в поток в определенной кодировке.
Наиболее очевидная разница в том, что FileStream
позволяет операции чтения/записи, в то время как StreamWriter
это только для записи.
StreamWriter
страница продолжается добавить:
StreamWriter предназначен для вывода символов в определенной кодировке, в то время как классы, полученные из потока предназначены для ввода и вывода байт.
Итак, второе отличие состоит в том, что FileStream
для байтов, а StreamWriter
- для текста.
Это два разных уровня, используемых для вывода информации в известные источники данных.
FileStream - это тип потока, который концептуально является механизмом, который указывает на какое-либо местоположение и может обрабатывать входящие и/или исходящие данные в и из этого местоположения. Существуют потоки для чтения/записи файлов, сетевых подключений, памяти, труб, консоли, отладочных и трассировщиков и нескольких других типов источников данных. В частности, FileStream существует для выполнения чтения и записи в файловую систему. Большинство потоков довольно низкого уровня в их использовании и обрабатывают данные как байты.
StreamWriter - это оболочка для потока, которая упрощает использование этого потока для вывода простого текста. Он предоставляет методы, которые берут строки вместо байтов, и выполняет необходимые преобразования в байт-массивы и из них. Есть и другие писатели; другой основной, который вы будете использовать, это XmlTextWriter, который облегчает запись данных в формате XML. Есть также Читатели-коллеги для писателей, которые аналогичным образом обертывают поток и облегчают вывод данных.
Одно ключевое различие (в дополнение к приведенным выше комментариям) может заключаться в том, что FileStream поддерживает случайный доступ к диску и считывает любой файл FileStream.Position. Для больших изменений файлов это может быть неоценимым.
Также важно отметить, что 'FileStream' - это тип потока, специально предназначенный для файлов. Потоки изначально работают с байтами, однако 'StreamWriter'/Reader будет писать/читать текст на * любом * потоке, а не только на FileStream's. Например, «MemoryStreams», «NetworkStreams» и т. Д. – iliketocode