Можно ли клонировать поток?
Возможно ли клонировать поток .NET?
Ответ 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
Нет, вы не можете клонировать общий поток.