使用 NIO 实现的一个超级快的 FileServlet
发布时间:2020-12-15 00:13:06 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 private void output(HttpServletResponse response,String filePathAndFileName,String mimeType) throws IOException { File file = new File(fileP
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 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,nGet); // write bytes to output op.write(barray); } bb.clear(); } } catch (IOException e) { e.printStackTrace(); } finally { bb.clear(); fileChannel.close(); fileInputStream.close(); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 为什么System.out.println必须在方法内?
- Spring FileSystemXmlApplicationContext类:指定配置文件的
- 蚂蚁花呗Java开发岗:算法+SpringCloud+SpringBoot+Redis+M
- 如何将日期添加到java简单日期格式
- java – 亚马逊的S3能否以日期顺序返回对象摘要?
- 写给自己看的java教程。
- java-ee – 使用Java EE 6将EJB注入域对象
- java – Dropwizard不会将自定义记录器记录到文件中
- 如何在不同的分段环境中维护java webapps?
- java – HTTP状态500 – 未找到提供程序org.glassfish.json