java - 如何在 Servlet 请求中将传入字节直接写入磁盘?

标签 java servlets upload servlet-3.0

我想知道是否可以将 HttpServletRequest 的传入字节直接写入磁盘而不将其保存在内存中。

Note that I don't want to wait the entire request to complete, but handle partial data independently. Like chunks.

我目前正在使用 JBOSS,只有在整个上传完成后,我才会在 doPost 方法中的 ServletInputStream 中获取这些字节。但我想在读取时从 InputStream 中“读取并删除”这些字节。有大量文件正在上传,我希望按照如下所示的协调流程进行工作:

  1. InputStream 到达 1024 字节
  2. 从 InputStream 读取(并删除)1024 字节
  3. 1024 字节写入输出流(在本例中为 FileOutputStream)

这可能吗?作为原始套接字通信...从而完全避免 OOM。

最佳答案

您可以使用所需大小的 block (缓冲区)来部分读取数据:

BufferedInputStream bis = new BufferedInputStream(yourInputStream);
BufferedOutputStream bos = new BufferedOutputStream(yourFileOutputStream);
final int FILE_CHUNK_SIZE = 1024 * 4; //easier to change to 8 KBs or any other size you want/need
byte[] chunk = new byte[FILE_CHUNK_SIZE];
int bytesRead = 0;
while ((bytesRead = input.read(chunk)) != -1) {
    bos.write(chunk, 0, bytesRead);
}
bos.close();
bis.close();

关于java - 如何在 Servlet 请求中将传入字节直接写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399067/

相关文章:

java - 在Android中初始化之前访问类对象

sql-server - HTTP 状态 500 - 此驱动程序不支持 Java 运行时环境 (JRE) 版本 1.7

java - 同时使用 Servlet 和 JSP 会导致意外循环

php - Zend Framework 2 中的 Pdf 上传

javascript - 我正在尝试使用简单的网络摄像头捕获上传,上传不起作用?

java - 获取定义的值并在 Java 字符串方法中使用它们

java - 使用 ImageGetter 从 HTML 抓取图像时出现内存不足错误

java - 带有 Selenium 和 Java 关键字的机器人框架

java.lang.NoClassDefFoundError : Could not initialize class com. DatabaseHandler.DBHandler

objective-c - Info.plist 上传错误中的 CFBundleVersion