栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

以最佳性能将图像写入servlet响应

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以最佳性能将图像写入servlet响应

为了获得最佳性能和效率,请勿将全部内容放入

byte[]
byte
是的,每个都吃掉Java内存中的一个字节。想象有100个并发用户,每个100KB请求10张图像,这已经消耗了100MB
Java内存。

InputStream
使用DB从中获取图像
ResultSet#getBinaryStream()
,将其包装在中,
BufferedInputStream
然后将其写入通过小缓冲区
OutputStream
包装在响应中。
BufferedOutputStream``byte[]

假设您通过数据库键选择图像作为标识符,请在HTML中使用它:

<img src="images/123">

创建

Servlet
其在映射类
web.xml
url-pattern
/images/*
并执行其
doGet()
方法如下:

Long imageId = Long.valueOf(request.getPathInfo().substring(1)); // 123Image image = imageDAO.find(imageId); // Get Image from DB.// Image class is just a Javabean with the following properties:// private String filename;// private Long length;// private InputStream content;response.setHeader("Content-Type", getServletContext().getMimeType(image.getFilename()));response.setHeader("Content-Length", String.valueOf(image.getLength()));response.setHeader("Content-Disposition", "inline; filename="" + image.getFilename() + """);BufferedInputStream input = null;BufferedOutputStream output = null;try {    input = new BufferedInputStream(image.getContent());    output = new BufferedOutputStream(response.getOutputStream());    byte[] buffer = new byte[8192];    for (int length = 0; (length = input.read(buffer)) > 0) {        output.write(buffer, 0, length);    }} finally {    if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}    if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}}

在中,

ImageDAO#find()
您可以用来从数据库中
ResultSet#getBinaryStream()
获取图像
InputStream



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号