Ответ 1
В .NET 4.5.1 он использует фиксированный размер буфера 81920 байт. (В более ранних версиях .NET использовался фиксированный размер буфера 4096 байт, и, без сомнения, он будет продолжать меняться со временем.) Также существует перегрузка, где вы можете передать свой собственный размер буфера.
Реализация очень похожа на вашу, по модулю несколько перетасовки и некоторую проверку ошибок. Отражатель делает его сердцем следующим образом:
private void InternalCopyTo(Stream destination, int bufferSize)
{
int num;
byte[] buffer = new byte[bufferSize];
while ((num = this.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}
(Теперь вы можете увидеть фактический источник http://referencesource.microsoft.com/#mscorlib/system/io/stream.cs#98ac7cf3acb04bb1.)
Проверка ошибок в основном касается того, являются ли input.CanRead и output.CanWrite истинными, либо либо расположены. Поэтому в ответ на вопрос Benny это должно быть совершенно счастливым копирование из NetworkStream (или в записываемый NetworkStream).