Вопрос:
В чем разница между 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 будет писать / читать текст в любом потоке, а не только вFileStreams. Так , например,MemoryStreams,NetworkStreamsи т.д ..