Прежде всего, это не связано с сервлетами. Это относится к Java IO в целом. В конце концов, у вас есть только InputStream
и OutputStream
.
Что касается ответа, вы не единственный, кто задумался об этом. На веб-сайтах вы можете найти других людей, которые задавались вопросом о том же самом, но приложили усилия, чтобы протестировать / сравнить его самостоятельно:
Как правило, самый быстрый способ - FileChannel
с массивом байтов 256 КБ, который читается через упакованный ByteBuffer
и записывается непосредственно из байтового массива. Действительно, NIO.
FileInputStream input = new FileInputStream("/path/to/file.ext");
FileChannel channel = input.getChannel();
byte[] buffer = new byte[256 * 1024];
ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
try {
for (int length = 0; (length = channel.read(byteBuffer)) != -1;) {
System.out.write(buffer, 0, length);
byteBuffer.clear();
}
} finally {
input.close();
}