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

时间:2015-05-22 14:15:32

标签: java servlets upload servlet-3.0

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

  

请注意,我不想等待整个请求完成,而是独立处理部分数据。像块一样。

我正在使用JBOSS,只有在整个上传完成后,才能在doPost方法中的ServletInputStream中获取这些字节。但我想"阅读并删除"我读取它时来自InputStream的这些字节。有大量文件正在上传,我希望以协调的方式工作,如下所示:

  1. 1024字节到达InputStream
  2. 从InputStream读取(并删除)1024字节
  3. 1024字节写入Outputstream(在本例中为FileOutputStream)
  4. 这可能吗?作为原始套接字通信工作......从而完全避免OOM。

1 个答案:

答案 0 :(得分:2)

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

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();
相关问题