InputStream, который быстрее читает () или читает (байт, смещение, длина)

Я пишу приложение для Android, которое использует InputStream от Socket . Я пытаюсь отправить файл с компьютера на андроид таким образом. Размер файла – почти 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; } } в 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; } } в 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 метода, которые будут быстрее с точки зрения производительности?

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

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

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

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

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

Intereting Posts
Прокрутка с помощью сворачиваемой панели инструментов и вкладок Странное поведение с компоновкой координатора и сворачивающаяся панель инструментов с перекрывающимся контентом Android TTS не может говорить большой объем текста Попытка подключиться к XMPP-серверу с помощью aSmack на Android дает мне «no dns resolver active» Как принудительно обновлять информацию о конфигурации? Android AVD для Jelly Bean и API Google – Android WebView для Facebook, как кнопка Программно получить разрешения от manifest.xml в android Как отключить отладочные сообщения Android MediaPlayer Как проверить подключение к Интернету в Android? Являются ли фрагменты андроида похожими на iframe в HTML? Braintree Интеграция вызывает проблемы Android Android ImageView, как установить левый нижний, такой как setScaleType (ScaleType.FIT_END) ;, но не подходит для правого нижнего Android / Java: сохранение байтового массива в файл (.jpeg) Android: onUpgrade не вызывается при обновлении базы данных