Только для целей тестирования я создал этот контроллер, который генерирует файл размером 100 МБ и возвращает его клиенту. Метод очень быстрый. Содержание файла не имеет значения. Файл генерируется на лету, на диск он не сохраняется.
Можно ли уменьшить нагрузку на память, особенно на java heap? Спасибо
@GetMapping("/testDownload100MB")
public ResponseEntity<Resource> download100MB() throws IOException {
int sizeInBytes = 100 * 1024 * 1024;
ByteArrayOutputStream outStream = new ByteArrayOutputStream(sizeInBytes);
for (int i = 0; i < sizeInBytes; i++) {
outStream.write(0);
}
Resource resource = new ByteArrayResource(outStream.toByteArray());
return ResponseEntity.ok()
.headers(utilities.getGenericHttpHeadersToDownloadFile())
.contentLength(sizeInBytes)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
Код utilities.getGenericHttpHeadersToDownloadFile()
не имеет отношения к вопросу, но я сообщаю об этом для полноты:
public HttpHeaders getGenericHttpHeadersToDownloadFile() {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=myfile");
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return headers;
}