Соединить потоки - PullRequest
       22

Соединить потоки

3 голосов
/ 03 февраля 2011

У меня есть такой сценарий:

DownloadLibrary.GetData(Stream targetStream);
SaveLibrary.WriteData(Stream sourceStream);

Я хочу отправить данные, которые targetStream собирает, в sourceStream. Я придумала несколько решений, но не могу найти способ соединить эти потоки напрямую.

Я пытаюсь добиться отправки данных из targetStream в sourceStream без буферизации targetStream в первую очередь.

Как это можно сделать?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 03 февраля 2011

В Stream имеется встроенная поддержка (из .Net 4.0) для копирования одного потока в другой с помощью CopyTo, например:

stream1.CopyTo(stream2)

Пример:

[Test]
public void test()
{
    string inString = "bling";

    byte[] inBuffer = Encoding.ASCII.GetBytes(inString);

    Stream stream1 = new MemoryStream(inBuffer);
    Stream stream2 = new MemoryStream();

    //Copy stream 1 to stream 2
    stream1.CopyTo(stream2);

    byte[] outBuffer = new byte[inBuffer.Length];

    stream2.Position = 0;        
    stream2.Read(outBuffer, 0, outBuffer.Length);

    string outString = Encoding.ASCII.GetString(outBuffer);

    Assert.AreEqual(inString, outString, "inString equals outString.");
}
2 голосов
/ 03 февраля 2011

Встроенный метод CopyTo, указанный в ответе chibacity, доступен в .NET 4.0.

Для более ранних версий посмотрите на этот вопрос .

...