Метод stream.read принимает длину как целочисленный тип ???в то время как - PullRequest
2 голосов
/ 30 августа 2010

Я пытаюсь прочитать файл из потока.

и я использую метод stream.read для чтения байтов. Таким образом, код выглядит как ниже

FileByteStream.Read(buffer, 0, outputMessage.FileByteStream.Length)

Теперь вышесказанное дает мне ошибку, поскольку последний параметр "outputMessage.FileByteStream.Length" возвращает значение типа long, но метод ожидает целочисленный тип.

Пожалуйста, сообщите.

1 Ответ

4 голосов
/ 30 августа 2010

Преобразуйте его в int ...

FileByteStream.Read(buffer, 0, Convert.ToInt32(outputMessage.FileByteStream.Length))

Вероятно, это int, потому что эта операция блокируется до тех пор, пока она не закончит чтение ... так что если вы находитесь в большом объемеприложения, вы можете не захотеть блокировать при чтении большого файла.

Если то, что вы читаете, не имеет разумного размера, вы можете рассмотреть возможность циклического считывания данных в буфер (пример из MSDN docs ):

//s is the stream that I'm working with...
byte[] bytes = new byte[s.Length];
int numBytesToRead = (int) s.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
    // Read may return anything from 0 to 10.
    int n = s.Read(bytes, numBytesRead, 10);
    // The end of the file is reached.
    if (n == 0)
    {
        break;
    }
    numBytesRead += n;
    numBytesToRead -= n;
}

Таким образом, вы не выполняете приведение, и если вы выберете достаточно большое число для чтения в буфер, вы пройдете только черезwhile цикл один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...