| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
w43m
10年前发布

使用 NIO 实现的一个超级快的 FileServlet

   private void output(HttpServletResponse response, String filePathAndFileName, String mimeType)        throws IOException {        File file = new File(filePathAndFileName);        // set response headers      response.setContentType((mimeType != null) ? mimeType : "application/octet-stream");      response.setContentLength((int) file.length());                 // read and write file      ServletOutputStream op = response.getOutputStream();      // 128 KB buffer      int bufferSize = 131072;      FileInputStream fileInputStream = new FileInputStream(file);      FileChannel fileChannel = fileInputStream.getChannel();      // 6x128 KB = 768KB byte buffer      ByteBuffer bb = ByteBuffer.allocateDirect(786432);      byte[] barray = new byte[bufferSize];      int nRead, nGet;        try {        while ((nRead = fileChannel.read(bb)) != -1) {          if (nRead == 0)            continue;          bb.position(0);          bb.limit(nRead);          while (bb.hasRemaining()) {            nGet = Math.min(bb.remaining(), bufferSize);            // read bytes from disk            bb.get(barray, 0, nGet);            // write bytes to output            op.write(barray);          }          bb.clear();        }      } catch (IOException e) {        e.printStackTrace();      } finally {        bb.clear();        fileChannel.close();        fileInputStream.close();      }    }