Como escrever o conteúdo de um fluxo em outro fluxo em .net?

Muitas vezes me deparo com o problema que tenho um fluxo cheio de dados e quero escrever tudo em outro fluxo.

Todos os exemplos de código lá fora usam um buffer na forma de uma matriz de bytes.

Existe uma maneira mais elegante para isso?

Se não, qual é o tamanho ideal do buffer. Quais fatores compõem esse valor?