Предполагая, что вам нужно прочитать весь файл в память сразу (как вы это делаете в настоящее время), ни чтение небольших кусков, ни NIO вам здесь не помогут.
На самом деле, вы бывероятно, лучше всего читать большие куски - что ваш обычный код ввода-вывода автоматически делает для вас.
Ваш код NIO в настоящее время медленнее, потому что вы читаете только один байт за раз (используя buffer.get();
).
Если вы хотите обрабатывать блоками - например, передавать между потоками - вот стандартный способ сделать это без NIO:
InputStream is = ...;
OutputStream os = ...;
byte buffer[] = new byte[1024];
int read;
while((read = is.read(buffer)) != -1){
os.write(buffer, 0, read);
}
При этом используется размер буфера всего 1 КБ,но может передавать неограниченное количество данных.
(Если вы расширите свой ответ подробностями того, что вы на самом деле хотите сделать на функциональном уровне, я мог бы еще больше улучшить этот ответ.)