Как улучшить производительность файлового ввода-вывода в службе отдыха - PullRequest
0 голосов
/ 18 апреля 2019

Сценарий, который я имею под рукой, происходит из моей службы весенней загрузки, читает слово doc из папки ресурсов и передает байтовый массив клиенту

Я читаю слово doc в памяти, используя FileInputStream, преобразую входной поток в байтовый массив, используя Apache Common IO IOUtils, и помещаю его в тело ответа службы rest.

Проблема здесь в том, что я всегда читаю файл в memeirh oer запросе на обслуживание, который наносит ущерб локальной памяти процесса, в котором запущен сервис.

Я не могу прочитать файл построчно и таким образом вернуть его вызывающей стороне службы, так как мне нужно вернуть массив байтов обратно вызывающей стороне все вместе

Другая проблема, которую я предвижу, связана с тем, как читается файл. Я хочу быть не блокирующим IO вместо блокирующего IO.

Хотите знать, какой эффективный способ решить эту проблему

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Если вы не хотите загружать файл каждый раз, лучше создать @Bean, делая это на этапе init / postconstruct. Вы также можете добавить некоторые функциональные возможности в свой метод retrieve(), который проверяет и сохраняет время изменения файла, вызывая File.lastModified(), чтобы решить, нужно ли вам повторно загружать контент или нет.

0 голосов
/ 19 апреля 2019

Вам действительно нужно читать файл каждый раз, когда поступает запрос.

В противном случае вы можете просто прочитать файл при запуске сервера и затем сохранить файл в памяти, хранящейся в Spring Bean. Затем получать его оттуда при каждом звонке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...