Каково различие между вызовом Потока. Записать и использование StreamWriter?

Каково различие между инстанцированием a Stream объект, такой как MemoryStream и вызов memoryStream.Write() метод для записи в поток, и инстанцирующий a StreamWriter объект с потоком и вызовом streamWriter.Write()?

Рассмотрите следующий сценарий:

У Вас есть метод, который берет Поток, пишет значение и возвращает его. Поток читается из позже, таким образом, положение должно быть сброшено. Существует два возможных способа сделать его (оба, кажется, работают).

// Instantiate a MemoryStream somewhere
//     - Passed to the following two methods
MemoryStream memoryStream = new MemoryStream();

// Not using a StreamWriter
private static Stream WriteToStream(Stream stream, string value)
{
    stream.Write(Encoding.Default.GetBytes(value), 0, value.Length);
    stream.Flush();
    stream.Position = 0;
    return stream;
}

// Using a StreamWriter
private static Stream WriteToStreamWithWriter(Stream stream, string value)
{
    StreamWriter sw = new StreamWriter(stream);
    sw.Write(value, 0, value.Length);
    sw.Flush();
    stream.Position = 0;
    return stream;
}

Это - частично проблема объема, поскольку я не хочу закрывать поток после записи в нее, так как она будет считана из позже. Я также, конечно, не хочу располагать его также, потому что это закроет мой поток. Различие, кажется, что не использование StreamWriter представляет прямую зависимость от Кодирования. Значение по умолчанию, но я не уверен, что это - очень грандиозное предприятие. Каково различие, если таковые имеются?

15
задан John Nelson 21 May 2010 в 12:52
поделиться

3 ответа

С StreamWriter у вас есть перегрузки более высокого уровня, которые могут записывать различные типы в поток, не беспокоясь о деталях. Например, ваш код

sw.Write(value, 0, value.Length);

на самом деле может быть просто

sw.Write(value);

Использование перегрузки StreamWriter.Write (строка).

16
ответ дан 1 December 2019 в 03:43
поделиться

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

1
ответ дан 1 December 2019 в 03:43
поделиться

StreamWriter - это суперкласс Stream, который реализует TextWriter для упрощения обработки текста. Но поскольку это суперкласс, у него есть все те же методы в дополнение к методам обработки текста. Вот почему вам нужно Encoding.Default.GetBytes (value) в первом примере, а во втором - нет.

1
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: