InputStream, который быстрее read () или read (byte, offset, length) - PullRequest
3 голосов
/ 07 мая 2011

Я пишу приложение для Android, которое использует InputStream из Socket.Я пытаюсь отправить файл с ПК на Android таким образом.Размер файла почти 40 КБ, и на Android я нахожу, что он может читать только 2 КБ данных за раз, поэтому я читаю его кусками.*

1)

while((d=inputStream.read())>=0)
{
    imgData[i]=(byte)d;
    i++;
    if(i>=40054)
    {
        // do the further processing here like saving it on disk.
        i=0;
    }
}

2)

while(inputStream.read(byte,0,2048)>=0)
{
    //merge this byte to buffer here... 
    i=i+2048;
    if(i>=40054)
    {
        // do the further processing here like saving it on disk.
        i=0;
    }
}

Сформируйте эти 2 метода, которые будут быстрее с точки зрения производительности?

Ответы [ 2 ]

7 голосов
/ 07 мая 2011

Второй, потенциально долгий путь.Чтение блока за раз почти всегда предпочтительнее, чем чтение байта за раз, если только вы действительно не хотите читать только один байт.

Однако ваш код в настоящее время не работает,в том, что вы не принимаете во внимание возвращаемое значение read, за исключением проверки того, что что-то было прочитано.Возможно, он не прочитал 2048 байт.Вы должны использовать что-то вроде:

int bytesRead;

while ((bytesRead = inputStream.read(buffer, 0, buffer.length)) > 0)
{
    // Use bytesRead here
}

С этим кодом вы вполне можете спокойно читать более 2К за раз в некоторых ситуациях ... это зависит отсеть, но по крайней мере код будет надежным.

0 голосов
/ 07 мая 2011

@ Op, Вы также можете создать BufferedInputStream с указанным размером буфера и читать фрагменты из буферизованного потока.

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