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