Ответ 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);
}
}