Стиль метода чтения FileInputStream - PullRequest
2 голосов
/ 26 февраля 2012

Метод чтения FileInputStream имеет подпись (это правильный термин?) -

     public int read(byte[] b) throws IOException

     // Reads up to b.length bytes of data from this input stream into an array of bytes. This method blocks until some input is available.
     // Returns: the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached.

В чем преимущество такой подписи по сравнению с чем-то вроде этого -

     public byte[] read(int numberOfBytes) throws IOException
     // Reads up to numberOfBytes bytes of data from this input stream into an array of bytes.
     // Returns- an array of bytes read. Array is empty if there is no more data because the end of the file has been reached.

1 Ответ

4 голосов
/ 26 февраля 2012

Первая форма позволяет вам повторно использовать один и тот же массив byte[] для нескольких выполнений.По сути, вы можете прочитать весь поток с минимальным мусором (низкая активность GC).

Последний явно более удобен, но требует создания нового экземпляра byte[] каждый раз, когда он выполняется внутри метода read().Это означает, что при чтении файла 10 ГиБ (даже в 100-байтовом блоке) ваше приложение будет выделять 10 ГБ памяти в целом - не одновременно, но все же сборщик мусора будет работать как сумасшедший.

взгляд на Collection.toArray(T[]) - это тот же принцип.

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