Я не уверен, почему вы вообще используете BinaryReader
/ BinaryWriter
. Лично я бы начал с полезного служебного метода:
public static void CopyStream(Stream input, Stream output)
{
// Insert null checking here for production
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
тогда назовите это:
using (Stream input = assembly.GetManifestResourceStream(resourceName))
using (Stream output = File.Create(path))
{
CopyStream(input, output);
}
Конечно, вы можете изменить размер буфера или использовать его в качестве параметра метода - но главное, что это более простой код. Это более эффективно? Нету. Вы уверены, что нужен этот код, чтобы быть более эффективным? У вас есть сотни мегабайт, которые нужно записать на диск?
Я нахожу, что мне редко нужно, чтобы код был сверхэффективным, но мне почти всегда нужно, чтобы он был простым. Разница в производительности, которую вы можете увидеть между этим и «умным» подходом (если он вообще доступен), вряд ли будет эффектом изменения сложности (например, от O (n) до O (log n)) - и это тип прироста производительности, который действительно стоит преследовать.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, .NET 4.0 имеет Stream.CopyTo
, поэтому вам не нужно кодировать это самостоятельно.