当前位置: 首页 > 面试题库 >

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

夏星阑
2023-03-14
问题内容

我正在以最佳性能将图像写入servlet响应。有什么建议,做法和经验吗?


问题答案:

为了获得最佳性能和效率,请勿将全部内容放入byte[]byte是的,每个都吃掉Java内存中的一个字节。想象有100个并发用户,每个100KB请求10张图像,这已经消耗了100MB
Java内存。

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

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

<img src="images/123">

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

Long imageId = Long.valueOf(request.getPathInfo().substring(1)); // 123
Image 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



 类似资料:
  • 问题内容: 我正在编写Java 2D游戏。我正在使用内置的Java 2D图形库,在我从BufferStrategy中从JFrame(有时是全屏)的Canvas中从BufferStrategy获取的Graphics2D上进行绘图。BufferStrategy是双缓冲的。重涂是通过计时器主动完成的。我遇到了一些性能问题,尤其是在Linux上。 Java2D有很多创建图形缓冲区和绘制图形的方式,我只是不

  • 扩展是浏览器的补充,旨在提供补充和自定义功能。 延缓或损害浏览体验的扩展程序对用户来说是有问题的,并且违背了Chrome 扩展程序的目标。除了一般的良好编码习惯外,开发人员还应遵循这些做法,以确保其扩展以最佳性能运行。 尽可能延迟 直到需要它们再加载资源。 在启动功能中仅包括打开扩展所需的功能。在启动过程中,请勿加载仅在用户点击按钮时才需要的东西,或仅在用户登录后才起作用的功能。 管理重要事件 高

  • Overview This article discusses performance and reliability best practices for Express applications deployed to production. This topic clearly falls into the “devops” world, spanning both traditional

  • 上下文:我试图用Java创建一个动画。动画是简单地采取一个图像,并使它出现从最暗的像素到最亮。 问题:定义像素转换的内部算法不是我的问题。我对Java和一般计算都是新手。我做了一些研究,知道有很多API有助于图像筛选/转换。我的问题是表现,理解它。 对于实现,我创建了一个方法,它执行以下操作: 接收BufferedImage。 获取BufferedImage的WritableRaster。 使用s

  • 当要保证用 IBM DB2 ® Universal Database™(DB2 UDB) 和 Borland® 工具(如 Delphi™、C++Builder™ 或Kylix™)构建的企业应用程序拥有最优性能时,程序员可以利用 DB2 优化器的能力来处理即使是“难以处理的”SQL 语句并给出有效的存取路径。 尽管如此,拙劣编码的 SQL 和应用程序代码仍可能给您带来性能问题,通过学习几条基本准则可

  • 问题内容: 我写了两种方法检查那里的表现 并在编译后检查它的字节码 在这里,两个操作码用于实现if条件:在第一种情况下,它使用ifnull-检查栈顶值是否为null-;在第二种情况下,它使用if_acmpeq- 检查栈顶值是否相等- 那么,这会对性能产生影响吗?(这将帮助我证明null的第一个实现在性能方面以及可读性方面都不错:)) 问题答案: 比较生成的字节码几乎没有意义,因为大多数优化是在运行