欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用 NIO 实现的一个超级快的 FileServlet,niofileservlet,private void

来源: javaer 分享于  点击 1809 次 点评:38

使用 NIO 实现的一个超级快的 FileServlet,niofileservlet,private void


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();    }  }//该片段来自于http://byrx.net
相关栏目:

用户点评