Не используйте available()
: это ненадежно. И не игнорируйте результат метода read()
: он говорит вам, сколько байтов действительно было прочитано. И если вы хотите прочитать все в памяти, используйте ByteArrayOutputStream, а не List<byte[]>
:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read;
while ((read = reader.read(buffer)) >= 0) {
baos.write(buffer, 0, read);
}
byte[] everything = baos.toByteArray();
Я думаю, что 1024 немного меньше размера буфера. Я бы использовал больший буфер (что-то вроде 16 КБ или 32 КБ)
Обратите внимание, что Apache Commons IO и Guava имеют служебные методы, которые делают это для вас, и уже оптимизированы.