Я хочу загрузить изображения, которые являются 2MB - 10MB, на мой сервер и сохранять их непосредственно на жесткий диск. Цель состоит в том, чтобы сохранить как можно больше памяти кучи моего JVM, потому что, если пользователь одновременно загружает мою систему, ее не следует сбрасывать.Эффективная загрузка файлов/изображений в Java?
Вот как я это делаю в данный момент. Когда запрос с загрузкой прийти в мой контроллер я:
CommonsMultipartFile file = (CommonsMultipartFile) request.getFile('image')
InputStream inputStream = file.inputStream
byte [] byteFile = inputStream.getBytes()
try{
def fullPath = // some image path and file name
def newFile = new FileOutputStream(fullPath)
newFile.write(byteFile)
newFile.close()
}
catch(IOException e){ }
Here Я читал, что есть ImageIO и java.awt.Toolkit, где Инструментарий должен быть быстрым, чтобы сохранить файл.
Как я могу улучшить свою загрузку для использования как можно меньше кучи и загрузить как можно быстрее?
Альтернатива 1:
Альтернативой может быть:
CommonsMultipartFile file = (CommonsMultipartFile) request.getFile('image')
def fullPath = // some image path and file name
file.transferTo(new File(fullPath))
Какой из них лучше?
Является ли моя альтернатива 1 такой же: http://commons.apache.org/proper/commons-fileupload/streaming.html? Это так быстро? –
@ stephan1001 с использованием 'transferTo' всегда должен быть самым быстрым способом делать то, что вы хотите. Commons-fileupload буферизирует небольшие загрузки в память и передает большие файлы во временные файлы на диске. Вызов 'transferTo' будет выгружать буфер, если файл уже буферизирован в память или переименует временный файл, если он может, или сделать поточную копию из временного файла в пункт назначения, если он не может. Предоставление фреймворкам наиболее эффективного подхода для каждого файла с использованием его «знаний инсайдеров» никогда не будет медленнее, чем выбрать один подход самостоятельно и использовать его безоговорочно. –
Является ли кодирование того, что мне нужно позаботиться здесь? Если да, то как я могу гарантировать, что входящий файл кодируется UTF-8? –