Module  java.desktop
软件包  javax.imageio.spi

Class ImageReaderSpi

  • All Implemented Interfaces:
    RegisterableService


    public abstract class ImageReaderSpi
    extends ImageReaderWriterSpi
    服务提供商接口(SPI),用于ImageReader s。 有关服务提供程序类的更多信息,请参阅IIORegistry类的类注释。

    每个ImageReaderSpi提供了与它相关联的ImageReader类的几种类型的信息。

    谁定义的SPI类和类的简要描述的供应商的名称是通过提供getVendorNamegetDescription ,并getVersion方法。 这些方法可以被国际化以提供特定于区域的输出。 这些方法主要用于提供可用于组织弹出菜单或其他列表的简短的,可读的信息。

    格式名称,文件后缀,以及与该服务相关联MIME类型的列表可通过的方式获得getFormatNamesgetFileSuffixes ,和getMIMETypes方法。 这些方法可以用于识别基于手动格式选择,文件命名或MIME关联来解码特定文件或流的候选者ImageReader s(例如,当通过HTTP访问文件或作为电子邮件附件时)。

    通过canDecodeInput方法提供了一种更可靠的方法来确定哪些ImageReader可能能够解析特定的数据流。 此方法允许服务提供商检查实际的流内容。

    最后,可以通过调用createReaderInstance方法获得与此服务提供商相关联的ImageReader类的实例。 任何重量级的初始化(如加载本机库或创建大型表)至少应该延迟至首次调用此方法为止。

    另请参见:
    IIORegistryImageReader
    • 字段详细信息

      • STANDARD_INPUT_TYPE

        @Deprecated
        public static final Class<?>[] STANDARD_INPUT_TYPE
        已过时。 而不是使用这个字段,直接创建等效的数组{ ImageInputStream.class }
        一个单元素数组,最初包含 ImageInputStream.class ,从 getInputTypes返回。
      • inputTypes

        protected Class<?>[] inputTypes
        一组 Class对象从 getInputTypes返回,最初为 null
      • writerSpiNames

        protected String[] writerSpiNames
        要从 getImageWriterSpiNames返回的字符串数组,最初为 null
    • 构造方法详细信息

      • ImageReaderSpi

        protected ImageReaderSpi​()
        构造一个空白ImageReaderSpi 初始化实例变量和/或覆盖方法实现的子类是为了提供所有方法的工作版本。
      • ImageReaderSpi

        public ImageReaderSpi​(String vendorName,
                              String version,
                              String[] names,
                              String[] suffixes,
                              String[] MIMETypes,
                              String readerClassName,
                              Class<?>[] inputTypes,
                              String[] writerSpiNames,
                              boolean supportsStandardStreamMetadataFormat,
                              String nativeStreamMetadataFormatName,
                              String nativeStreamMetadataFormatClassName,
                              String[] extraStreamMetadataFormatNames,
                              String[] extraStreamMetadataFormatClassNames,
                              boolean supportsStandardImageMetadataFormat,
                              String nativeImageMetadataFormatName,
                              String nativeImageMetadataFormatClassName,
                              String[] extraImageMetadataFormatNames,
                              String[] extraImageMetadataFormatClassNames)
        构造一个给定值的一个 ImageReaderSpi
        参数
        vendorName - 供应商名称,作为非 null String
        version - 版本标识符,作为非 null String
        names - 表示格式名称的非null数组String 必须至少有一个条目。
        suffixes - 表示公共文件后缀的String s的数组。 如果未定义任何后缀,则应提供null 长度为0的数组将被归一化为null
        MIMETypes - 表示格式的MIME类型的String的数组。 如果未定义MIME类型,则应提供null 长度为0的数组将被归一化为null
        readerClassName - 相关联的 ImageReader类的完全限定名称,作为非 null String
        inputTypes - 长度为至少为1的 Class对象的非 null数组,指示合法输入类型。
        writerSpiNames - 一个数组String命名所有关联的ImageWriter s或null 长度为0的数组被归一化为null
        supportsStandardStreamMetadataFormat - 表示流元数据对象是否可以使用由标准元数据格式描述的树的 boolean
        nativeStreamMetadataFormatName - a Stringnull ,将从 getNativeStreamMetadataFormatName返回。
        nativeStreamMetadataFormatClassName - a Stringnull ,用于实例化从 getNativeStreamMetadataFormat返回的元数据格式对象。
        extraStreamMetadataFormatNames - 要从getExtraStreamMetadataFormatNames返回的String s或null的数组。 长度为0的数组被归一化为null
        extraStreamMetadataFormatClassNames - 用于实例化要从getStreamMetadataFormat返回的元数据格式对象的String s或null的数组。 长度为0的数组被归一化为null
        supportsStandardImageMetadataFormat - 表示图像元数据对象是否可以使用由标准元数据格式描述的树的 boolean
        nativeImageMetadataFormatName - a Stringnull ,将从 getNativeImageMetadataFormatName返回。
        nativeImageMetadataFormatClassName - a Stringnull ,用于实例化要从 getNativeImageMetadataFormat返回的元数据格式对象。
        extraImageMetadataFormatNames -的阵列String从返回小号getExtraImageMetadataFormatNames 长度为0的数组被归一化为null
        extraImageMetadataFormatClassNames - 用于实例化从getImageMetadataFormat返回的元数据格式对象的String s或null的数组。 长度为0的数组被归一化为null
        异常
        IllegalArgumentException - 如果 vendorNamenull
        IllegalArgumentException - 如果 versionnull
        IllegalArgumentException - 如果 namesnull或长度为0。
        IllegalArgumentException - 如果 readerClassNamenull
        IllegalArgumentException - 如果 inputTypesnull或长度为0。
    • 方法详细信息

      • getInputTypes

        public Class<?>[] getInputTypes​()
        返回一个Class对象的数组,指示可以将什么类型的对象用作读者setInput方法的参数。

        对于只接受来自ImageInputStream输入的大多数读者,应该返回包含ImageInputStream.class的单元素数组。

        结果
        nullClass对象的长度至少为1的数组。
      • canDecodeInput

        public abstract boolean canDecodeInput​(Object source)
                                        throws IOException
        返回true如果提供的源对象看起来是这个读者支持的格式。 从这种方法返回true并不能保证阅读将成功,只是基于对流内容的简要检查,似乎有合理的成功机会。 如果源是一个ImageInputStream ,实现将通常检查流的前几个字节与格式相关联的“魔术数”。 一旦实际读取开始,读取器可能仍然在解码完成之前的任何时间指示失败。

        重要的是,对象的状态不会受到干扰,以便其他ImageReaderSpi可以正确地确定它们是否能够解码对象。 特别是,如果该源为ImageInputStream ,一个mark / reset对应该用来保存流位置。

        可能会尝试读取几乎任何流的“raw”格式应该返回false ,以避免被调用而不是更接近的匹配。

        如果source不是由getInputTypes返回的类的一个实例,则该方法应该简单地返回false

        参数
        source - 要解码的对象(通常为 ImageInputStream )。
        结果
        true如果这个流可能被解码。
        异常
        IllegalArgumentException - 如果 sourcenull
        IOException - 如果在读取流时发生I / O错误。
      • createReaderInstance

        public ImageReader createReaderInstance​()
                                         throws IOException
        返回与此服务提供程序相关联的ImageReader实现的实例。 返回的对象最初将处于初始状态,就好像它的reset方法已被调用一样。

        默认实现只是返回createReaderInstance(null)

        结果
        一个 ImageReader实例。
        异常
        IOException - 如果读取器类的加载或初始化期间或在读取器对象的实例化或初始化期间发生错误。
      • createReaderInstance

        public abstract ImageReader createReaderInstance​(Object extension)
                                                  throws IOException
        返回与此服务提供程序相关联的ImageReader实现的实例。 返回的对象最初将处于初始状态,就好像其reset方法已被调用一样。

        一个Object可能在施工时提供给插件。 对象的性质是完全插件具体的。

        通常,插件将使用代码(如return new MyImageReader(this)实现此方法。

        参数
        extension - 一个插件特定的扩展对象,可以是 null
        结果
        一个 ImageReader例子。
        异常
        IOException - 如果尝试实例化读取器失败。
        IllegalArgumentException - 如果 ImageReader的构造函数抛出一个 IllegalArgumentException来指示扩展对象不合适。
      • isOwnReader

        public boolean isOwnReader​(ImageReader reader)
        如果传入的ImageReader对象是与此服务提供商关联的ImageReader的实例,则返回true

        默认实现将reader参数的完全限定类名与传递给构造函数的类名进行比较。 如果需要更复杂的检查,该方法可能会被覆盖。

        参数
        reader - 一个 ImageReader实例。
        结果
        true如果识别 reader
        异常
        IllegalArgumentException - 如果 readernull
      • getImageWriterSpiNames

        public String[] getImageWriterSpiNames​()
        返回一个包含String s的数组, String包含所有ImageWriterSpi类的完全限定名称,可以理解与该服务提供商关联的ImageReader所使用的内部元数据表示,或者如果没有指定nullImageWriter 如果返回非null值,则该值必须为非零长度。

        数组中的第一个项目必须是“首选”作者的服务提供商的名称,因为它将用于实例化由ImageWriter返回的ImageIO.getImageWriter(ImageReader)

        这个机制可以用来获得ImageWriters ,这将理解由ImageReader生成的非像素元数据的内部结构(见IIOTreeInfo )。 通过从ImageReader获取此数据并将其传递给使用此方法获得的ImageWriters之一,客户端程序可以读取图像,以某种方式进行修改,并在保留所有元数据的同时将其写回,而无需了解元数据的内部结构,甚至了解图像格式。

        结果
        String的长度至少为1的数组,包含 ImageWriterSpinull
        另请参见:
        ImageIO.getImageWriter(ImageReader)