Использование ByteArrayOutputStream вместе с BufferedOutputStream, чтобы избежать проблем с памятью, это хорошая идея? - PullRequest
0 голосов
/ 02 ноября 2019

Я работаю над приложением весенней загрузки, которому нужно отправить рабочую книгу, созданную документом рабочей книги apache poi, клиенту через API REST, хотя я могу отправить ее, я хотел бы знать эффективный способ отправки файла черезwire.

  1. Я записал файл на диск и отправил файл клиенту, и API готов, но теперь мне нужно иметь дополнительный код для удаления таких устаревших файлов, поэтому я решил пойтисо вторым подходом

  2. Записать файл в ByteArrayOutputStream, а затем передать байтовый массив для создания ресурса Spring, и он отправит файл без записи на диск, и проблема будет решена.

но потом я нашел много ссылок, которые обсуждают вопросы эффективности и памяти ByteArrayOutputStream, как эта ->. переполнение стека

Как объясняет один из ответов, BufferedReader более эффективен, чем ByteArrayOutputStream, для эффективной записи файлов, поэтому я пришел к следующему коду:

    ByteArrayOutputStream byteOut= new ByteArrayOutputStream();
    BufferedOutputStream bufOut = new BufferedOutputStream(bos);
    String content = "lets imagin huge amount of data"; 
    bufOut.write(content.getBytes());
    bufOut.flush();
    bufOut.close();
    bos.close();
    System.out.println(new String(byteOut.toByteArray()));

IЯ могу писать на ByteArrayOutputStream напрямую без BufferedOutputStream, но я думаю об эффективности записи буферизованных данных вместо побайтных.

Правильно ли использовать приведенный выше код в данной ситуации?

...