Считайте данные из FileStream в общий поток.

StackOverflow https://stackoverflow.com/questions/129171

  •  02-07-2019
  •  | 
  •  

Вопрос

Какой наиболее эффективный способ прочитать поток в другой поток?В этом случае я пытаюсь прочитать данные из файлового потока в общий поток.Я знаю, что могу сделать следующее:
1.читать построчно и записывать данные в поток
2.читать куски байтов и писать в поток
3.и т. д.

Я просто пытаюсь найти наиболее эффективный способ.

Спасибо

Это было полезно?

Решение

Стивен Тауб обсуждает потоковый конвейер в своей колонке вопросов MSDN .NET. здесь.В статье он описывает метод CopyStream(), который копирует из одного входного потока в другой поток.Это очень похоже на то, что вы пытаетесь сделать.

Другие советы

Я собрал метод быстрого расширения (только для VS 2008 с версией 3.5):

public static class StreamCopier
{
   private const long DefaultStreamChunkSize = 0x1000;

   public static void CopyTo(this Stream from, Stream to)
   {
      if (!from.CanRead || !to.CanWrite)
      {
         return;
      }

      var buffer = from.CanSeek
         ? new byte[from.Length]
         : new byte[DefaultStreamChunkSize];
      int read;

      while ((read = from.Read(buffer, 0, buffer.Length)) > 0)
      {
        to.Write(buffer, 0, read);
      }
   }
}

Его можно использовать таким образом:

 using (var input = File.OpenRead(@"C:\wrnpc12.txt"))
 using (var output = File.OpenWrite(@"C:\wrnpc12.bak"))
 {
    input.CopyTo(output);
 }

Вы также можете слегка поменять логику и написать CopyFrom() метод тоже.

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

Я предполагаю, что под общим потоком вы имеете в виду любой другой тип потока, например поток памяти и т. д.

Если да, то наиболее эффективный способ — прочитать фрагменты байтов и записать их в поток получателя.Размер чанка может составлять около 512 байт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top