FileStream vs / различия StreamWriter?


вопрос:

чем отличается FileStream и StreamWriter в dotnet?

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

можно ли объединить эти два в один?

6 71

6 ответов:

чем отличается FileStream и StreamWriter в dotnet?

A FileStream Это Stream. Как и все потоки он имеет дело только с byte[] данные.

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

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

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

можно ли объединить эти два в один?

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

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

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

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

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

ну, от MSDN для FileStream:

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

и MSDN для StreamWriter:

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

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

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

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

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

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

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

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

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