从URL读取图像 - 性能问题?

时间:2012-12-11 00:28:53

标签: java image url inputstream outputstream

有人可以检查下面的代码,看看是否有更好的事情要做。我真正担心的是表现,我会有这个吗?如果没有,有什么方法可以做得更好,以提高代码的可读性吗?

try {

    URL url = new URL("http://www.pudim.com.br/SiteBuilder/UploadUsers/pudim.com.br/pudim.jpg");
    URLConnection uc = url.openConnection();
    String type = uc.getContentType();
    BufferedImage image = ImageIO.read(url);
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(image, "jpg", os);
    byte[] bytes = os.toByteArray();
    InputStream is = new ByteArrayInputStream(bytes);

    // not important :) ...
} catch (AmazonServiceException e) {
    e.printStackTrace();
} catch (AmazonClientException e) {
    e.printStackTrace();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

欢迎任何考虑因素。

谢谢!

2 个答案:

答案 0 :(得分:0)

从URL读取时,您将遇到所有正常的性能问题 - 连接/带宽/可用性差;同样的解决方案也适用 - 创建和使用本地缓存,在后台线程上加载/重IO(以避免阻塞主UI线程)。您还希望将代码包装在一个独立的参数化函数中......

在这个例子中,您实际上并没有对结果InputStream做任何事情 - 或许考虑它们是否总体上需要得到你想要的东西 - 就像你每次都将整个图像加载到内存中一样 - 如果您所做的只是将其保存到磁盘,则不是完全必要的。

答案 1 :(得分:0)

如果你想要的只是下载图片,我会使用BufferedInputStream 允许它从下面的网络尽快读取数据。

他们可以类似地使用BufferedOutputStream将其转储到本地文件的FileOutputStream

无需进行任何图像处理。