Нет необходимости напрямую записывать более 2 ГБ данных за один вызов
Если бы вы действительно располагали эту сумму в буфере непрерывно в памяти («как, например, небезопасно приобретенный UnmanagedMemoryStream для реализации дампа ядра?»), Вы могли бы легко объединять записи в несколько вызовов. В любом случае, он будет записан на диск блоками от 512 Кбайт до 4 Кбайт на текущем оборудовании.
Огромная ценность потоковых интерфейсов в том, что вы можете использовать их любым способом. Фактически, когда вы посмотрите на него, вы обнаружите, что массивы CLR (и все остальное) фактически ограничены 2 ГБ
Обновление
Поскольку вы теперь признались, что в основном хотите копировать потоки, вам лучше воспользоваться мгновенным решением. Есть File.Copy
File.Copy("file-a.txt", "file-new.txt");
Или есть стандартный ответ
Stream input
input.CopyTo(output); // .NET 4.0
// .NET 3.5 and others
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);
}
}
Не забывайте о Flushing
, Closing
и Disposing
ваших потоков в зависимости от ситуации , если вы обрабатываете потоки вручную.
Приветствия