java - 使用 ByteArrayOutputStream 和 BufferedOutputStream 来避免内存问题,这是个好主意吗?
问题描述
我正在开发 Spring Boot 应用程序,该应用程序需要通过 REST API 将 apache poi 工作簿文档创建的工作簿发送到客户端,虽然我能够发送它,但我想知道通过网络发送文件的有效方法。
我将文件写入磁盘并将文件发送到客户端,API 完成,但现在我必须有额外的代码来删除这些陈旧的文件,所以我决定采用第二种方法
在 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 上写入,但我正在考虑写入缓冲数据而不是逐字节写入的效率。
上面的代码在给定情况下使用是否正确?
解决方案
推荐阅读
- php - 当用户输入错误的url php时如何重定向到404错误页面
- c# - 如何使用 Peta Poco 将自动递增的 id 设置为另一列
- sql-server - Import-Module SQLServer 无法加载文件或程序集 Microsoft.SqlServer.ConnectionInfo 或 Microsoft.SqlServer.Smo
- docker - Golang 和 Gitlab 持续集成
- django - 如何翻译 Django 过滤器中的字段?
- google-apps-script - 如何动态地将值放入列中?
- spring-boot - 多租户 Spring Boot 应用程序中的 Hibernate Search 初始化索引
- python - pywinauto 打印控件标识符不显示所需的控件按钮
- python - 在python 3中按下X windows按钮时如何返回上一个窗口
- amazon-web-services - 如何控制 AWS Elasticsearch Service 和 Kibana 的访问?