FileStream проти / відмінності StreamWriter?


85

Питання:

Що відрізняється між FileStreamі StreamWriterв .Net ?

Який контекст ви повинні використовувати? У чому їх перевага та недолік?

Чи можна поєднати ці два в одне?

Відповіді:


98

Чим відрізняється FileStream від StreamWriter у dotnet?

A FileStreamє a Stream. Як і всі потоки, він має справу лише з byte[]даними.

A StreamWriter : TextWriter, є декоратором потоків. TextWriter кодує текстові дані, такі як рядок або символ, byte[]а потім записує їх у зв’язаний Stream.

Який контекст ви повинні використовувати? У чому їх перевага та недолік?

Якщо у вас є byte[]дані, ви використовуєте відкритий FileStream . Ви додаєте, StreamWriterколи хочете написати текст. Використовуйте Форматтер або Серіалізатор, щоб записати більш складні дані.

Чи можна поєднати ці два в одне?

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


4
Також важливо зазначити, що FileStreamце тип потоку, який спеціально пристосований до файлів. Потоки спочатку працюють з байтами, однак StreamWriter/ Reader буде писати / читати текст у будь-якому потоці, а не тільки в FileStreams. Так , наприклад, MemoryStreams, NetworkStreamsі т.д ..
iliketocode


14

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

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

ScottGu тут дуже добре пояснює різні об’єкти Stream: 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 призначений для виведення символів у певному кодуванні, тоді як класи, похідні від Stream, призначені для введення та виведення байтів.

Отже, друга відмінність - FileStreamце для байтів, тоді StreamWriterяк для тексту.


6

Вони є двома різними рівнями, що використовуються для виведення інформації до відомих джерел даних.

A FileStream- це тип потоку, який концептуально є механізмом, який вказує на якесь розташування і може обробляти вхідні та / або вихідні дані до цього місця та з нього. Існують потоки для читання / запису у файли, мережеві підключення, пам’ять, канали, консоль, прослуховувачі налагодження та трасування та деякі інші типи джерел даних. Зокрема, a FileStreamіснує для виконання читання та запису у файлову систему. Більшість потоків користуються досить низьким рівнем і обробляють дані як байти.

A StreamWriter- це обгортка для потоку, яка спрощує використання цього потоку для виведення простого тексту. Він надає методи, які замість байтів приймають рядки, і виконує необхідні перетворення в байтові масиви та з них. Є й інші письменники; інший основний, який ви використовуєте, - це XmlTextWriter, що полегшує запис даних у форматі XML . Є також аналоги Reader для Writer, які аналогічним чином обертають потік і полегшують повернення даних назад.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.