Второй будет не работать с произвольными двоичными данными - он обрабатывает данные как текстовые данные в кодировке UTF-8, а затем перекодирует их - это очень плохая идея если вы на самом деле не знаете, что это текст в кодировке UTF-8.
Вторая форма также использует байтовый массив, только один буфер за раз.
Однако у вас есть ошибкав первой версии: вы будете продолжать работать, пока bytesRead
не равен нулю, но начинает как 0.
Возможно, вы захотите:
Using stream As IO.FileStream = IO.File.OpenRead(state.FileName)
readBytes = stream.Read(buffer, 0, bufferLength)
While readBytes <> 0
requestStream.Write(buffer, 0, readBytes)
count += readBytes
readBytes = stream.Read(buffer, 0, bufferLength)
End While
End Using
В C # я бы использовал:
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, bufferLength)) > 0)
{
requestStream.Write(buffer, 0, readBytes);
count += readBytes;
}
, но я не знаю, можно ли сделать такое сложное назначение, как это в VB.
Некоторые другие параметры:
- Вы можете использовать
File.ReadAllBytes
для чтения всего файла в виде байтового массива, хотя, очевидно, это приведет к потере памяти, если это большой файл.Это своего рода безопасная версия вашего второго кода. - Вы можете использовать
Stream.CopyTo(Stream)
, если вы используете .NET 4. Если нет, вы можете написать этот код самостоятельно.в качестве метода расширения для повторного использования из других проектов.