【问题标题】:Understanding "ImageIO.read(getClass().getResource(path))"理解“ImageIO.read(getClass().getResource(path))”
【发布时间】:2014-01-20 09:49:03
【问题描述】:

我的问题是关于以下代码示例:

    public class BufferedImageLoader {

        private BufferedImage image;

        public BufferedImage loadImage(String path) throws IOException {

            image = ImageIO.read(getClass().getResource(path));
            return image;

        }

    }

我查看了 Java-API 并在 ImageIO 类中发现了 3 个不同的 read() 方法:

1.: 读取(文件输入)

2.: 读取(ImageInputStream 流)

3.: 读取(InputStream 输入)

4.: 读取(URL 输入)

我的问题是:在这个例子中使用了这四种方法中的哪一种? 我有点困惑,因为在示例中

read(getClass().getResource(path));

“getClass()”在这里返回“BufferedImageLoader”,对吗? 然后我们调用方法“read(getClass().getResource(path))”,它必须站在BufferedImageLoader Class中,但事实并非如此!

我哪里错了?

【问题讨论】:

  • Object#getClass() 返回一个 java.lang.Class 对象。 Class#getResource(String) 返回一个 java.net.URL 对象。

标签: java javax.imageio


【解决方案1】:

getClass().getResource(path)) 返回一个URL,所以在这种情况下,它将使用ImageIO.read(URL)

此外,如果您使用Class#getResourceAsInputStream,它将返回一个InputStream,这意味着它将使用ImageIO.read(InputStream) 代替

【讨论】:

    【解决方案2】:

    getClass() 返回java.lang.Class 的类型化实例,在您的情况下为Class<? extends BufferedImageLoader>,它代表BufferedImageLoader 类。该方法继承自java.lang.Object,返回对象的运行时类。
    java.lang.ClassgetResource(path)方法返回java.net.URL的实例

    【讨论】:

      【解决方案3】:
      <Script = "JavaScript">
      alert("Hello");
      </Script>
      
      alert('选中的项目删除成功')

      【讨论】:

        猜你喜欢
        • 2021-12-15
        • 2019-05-13
        • 2018-02-12
        • 2017-10-28
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多