Питання:
Що відрізняється між FileStream
і StreamWriter
в .Net ?
Який контекст ви повинні використовувати? У чому їх перевага та недолік?
Чи можна поєднати ці два в одне?
Відповіді:
Чим відрізняється FileStream від StreamWriter у dotnet?
A FileStream
є a Stream
. Як і всі потоки, він має справу лише з byte[]
даними.
A StreamWriter : TextWriter
, є декоратором потоків. TextWriter кодує текстові дані, такі як рядок або символ, byte[]
а потім записує їх у зв’язаний Stream
.
Який контекст ви повинні використовувати? У чому їх перевага та недолік?
Якщо у вас є byte[]
дані, ви використовуєте відкритий FileStream . Ви додаєте, StreamWriter
коли хочете написати текст. Використовуйте Форматтер або Серіалізатор, щоб записати більш складні дані.
Чи можна поєднати ці два в одне?
Так. Для створення StreamWriter вам завжди потрібен Stream. Допоміжний метод System.IO.File.CreateText("path")
створить їх у комбінації, і тоді вам залишиться лише розпорядитися () зовнішнім автором запису.
FileStream пише байти, StreamWriter - текст. Це все.
FileStream явно призначений для робочих файлів.
StreamWriter може використовуватися для потокової передачі на будь-який тип потоку - мережеві розетки, файли тощо.
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
- це тип потоку, який концептуально є механізмом, який вказує на якесь розташування і може обробляти вхідні та / або вихідні дані до цього місця та з нього. Існують потоки для читання / запису у файли, мережеві підключення, пам’ять, канали, консоль, прослуховувачі налагодження та трасування та деякі інші типи джерел даних. Зокрема, a FileStream
існує для виконання читання та запису у файлову систему. Більшість потоків користуються досить низьким рівнем і обробляють дані як байти.
A StreamWriter
- це обгортка для потоку, яка спрощує використання цього потоку для виведення простого тексту. Він надає методи, які замість байтів приймають рядки, і виконує необхідні перетворення в байтові масиви та з них. Є й інші письменники; інший основний, який ви використовуєте, - це XmlTextWriter
, що полегшує запис даних у форматі XML . Є також аналоги Reader для Writer, які аналогічним чином обертають потік і полегшують повернення даних назад.
FileStream
це тип потоку, який спеціально пристосований до файлів. Потоки спочатку працюють з байтами, однакStreamWriter
/ Reader буде писати / читати текст у будь-якому потоці, а не тільки вFileStream
s. Так , наприклад,MemoryStreams
,NetworkStreams
і т.д ..