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