首页 > 解决方案 > 使用 ByteArrayOutputStream 和 BufferedOutputStream 来避免内存问题,这是个好主意吗?

问题描述

我正在开发 Spring Boot 应用程序,该应用程序需要通过 REST API 将 apache poi 工作簿文档创建的工作簿发送到客户端,虽然我能够发送它,但我想知道通过网络发送文件的有效方法。

  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()));

我可以在没有 BufferedOutputStream 的情况下直接在 ByteArrayOutputStream 上写入,但我正在考虑写入缓冲数据而不是逐字节写入的效率。

上面的代码在给定情况下使用是否正确?

标签: javajava-iobytearrayoutputstreambufferedoutputstream

解决方案


推荐阅读