Я использую сервер API с Tomcat 8.5 (встроенная загрузка Spring).Есть 1 API, который должен прочитать файл изображения из файловой системы сервера и затем вернуть его.Поскольку API будет активно использоваться, я хотел бы изучить способы повышения его производительности.Интересно, могу ли я напрямую отправить файл в ответ, не копируя его в JVM.Пакет NIO, кажется, является выбором здесь, но я не уверен, поддерживает ли его Tomcat HttpServletResponse.
Channels.newChannel(response.getOutputStream())
только, кажется, возвращает оболочку.
В общем, я 'Я не уверен, что в следующей реализации используется NIO (прямое копирование пространства ядра) или просто традиционный ввод-вывод.
Path path = Paths.get(filePath);
try (FileChannel fileChannel = FileChannel.open(path);
ServletOutputStream outputStream = response.getOutputStream()) {
long size = fileChannel.size();
int position = 0;
WritableByteChannel outChannel = Channels.newChannel(outputStream);
while (position < size) {
position += fileChannel.transferTo(position, size, outChannel);
}
}