Подтвердить что ты не робот

Возможно ли клонировать поток .NET?

Можно ли клонировать поток?

4b9b3361

Ответ 1

Нет, потоки обычно относятся к локальным ресурсам определенного типа (сокет, дескриптор файла и т.д.), и поэтому они не могут быть клонированы или сериализованы. Кроме того, многие потоки являются только форвардными и не поддерживают поиск, поэтому вы даже не сможете перечитать их из потока.

Что вы можете сделать из читаемого потока, но скопируйте его в MemoryStream, который можно перемещать как массив байтов.

См. следующую статью для фрагмента кода, показывающего, как это сделать: Как скопировать содержимое одного потока в другой?

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[32768];
    while (true)
    {
        int read = input.Read (buffer, 0, buffer.Length);
        if (read <= 0)
            return;
        output.Write (buffer, 0, read);
    }
}

Ответ 2

Нет. Клонирование не является обычно поддерживаемой операцией в классе Stream. Чтобы быть таким, он должен был охватывать все возможные реализации класса Stream.

Это может быть выполнимо для таких элементов, как FileStream, но подумайте, что это значит для слова NetworkStream. Обычно клонирование имеет концепцию создания полностью отдельных объектов, которые идентичны в момент создания. Обычно это не относится к таким элементам, как TCP-соединения, которые обычно накладываются на NetworkStream на некотором уровне.

Ответ 3

Нет, вы не можете клонировать общий поток.