Поддержка Tomcat HttpServletResponse NIO - PullRequest
0 голосов
/ 19 марта 2019

Я использую сервер 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);
            }
        }
...