Версия с Files
короче и проще для понимания.
Другая версия более гибкая. Это не очень полезно, когда у вас есть только один файл для записи, но если у вас много файлов в разных хранилищах, это может сэкономить вам некоторые ресурсы.
EDIT
Вот Files.write
исходный код:
public static Path write(Path path, byte[] bytes, OpenOption... options)
throws IOException
{
// ensure bytes is not null before opening file
Objects.requireNonNull(bytes);
try (OutputStream out = Files.newOutputStream(path, options)) {
int len = bytes.length;
int rem = len;
while (rem > 0) {
int n = Math.min(rem, BUFFER_SIZE);
out.write(bytes, (len-rem), n);
rem -= n;
}
}
return path;
}
Как вы видите, он не использует NIO внутри, только старый добрый OutputStream
.
РЕДАКТИРОВАТЬ 2
На самом деле Files.newOutputStream
не верните FileOutputStream
, как я ожидал. Он возвращает OutputStream
, определенный в Channels.newOutputStream
, который использует NIO внутри.