模块 java.desktop

类 ImageReaderSpi

所有已实现的接口:
RegisterableService

public abstract class ImageReaderSpi extends ImageReaderWriterSpi
ImageReaders 的服务提供商接口 (SPI)。有关服务提供者类的更多信息,请参阅 IIORegistry 类的类注解。

每个 ImageReaderSpi 都提供有关与其关联的 ImageReader 类的几种类型的信息。

定义 SPI 类的供应商名称和类的简要说明可通过 getVendorNamegetDescriptiongetVersion 方法获得。这些方法可以国际化以提供特定于locale的输出。这些方法主要用于提供简短的、人类可读的信息,这些信息可用于组织弹出菜单或其他列表。

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

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

最后,可以通过调用 createReaderInstance 方法获得与此服务提供者关联的 ImageReader 类的实例。任何重量级的初始化,例如本地库的加载或大型表的创建,都应该至少推迟到第一次调用此方法时。

参见:
  • 字段详细信息

    • STANDARD_INPUT_TYPE

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

      protected Class <?>[] inputTypes
      getInputTypes 返回的 Class 对象数组,最初是 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 - String 的非null 数组,指示格式名称。必须至少存在一项。
      suffixes - 指示通用文件后缀的 String 数组。如果未定义后缀,则应提供 null。长度为 0 的数组将被规范化为 null
      MIMETypes - 指示格式的 MIME 类型的 String 数组。如果未定义 MIME 类型,则应提供 null。长度为 0 的数组将被规范化为 null
      readerClassName - 关联的 ImageReader 类的完全限定名称,作为非 null String
      inputTypes - 长度至少为 1 的 Class 对象的非 null 数组,指示合法输入类型。
      writerSpiNames - 一个数组 String 命名所有关联的 ImageWriternull 的类。长度为 0 的数组被标准化为 null
      supportsStandardStreamMetadataFormat - 一个 boolean 指示流元数据对象是否可以使用标准元数据格式描述的树。
      nativeStreamMetadataFormatName - 从 getNativeStreamMetadataFormatName 返回的 Stringnull
      nativeStreamMetadataFormatClassName - 一个 Stringnull ,用于实例化要从 getNativeStreamMetadataFormat 返回的元数据格式对象。
      extraStreamMetadataFormatNames - 从 getExtraStreamMetadataFormatNames 返回的 Stringnull 的数组。长度为 0 的数组被标准化为 null
      extraStreamMetadataFormatClassNames - Stringnull 的数组,用于实例化要从 getStreamMetadataFormat 返回的元数据格式对象。长度为 0 的数组被标准化为 null
      supportsStandardImageMetadataFormat - 一个 boolean 指示图像元数据对象是否可以使用标准元数据格式描述的树。
      nativeImageMetadataFormatName - 从 getNativeImageMetadataFormatName 返回的 Stringnull
      nativeImageMetadataFormatClassName - 一个 Stringnull ,用于实例化要从 getNativeImageMetadataFormat 返回的元数据格式对象。
      extraImageMetadataFormatNames - 要从 getExtraImageMetadataFormatNames 返回的 String 数组。长度为 0 的数组被标准化为 null
      extraImageMetadataFormatClassNames - Stringnull 的数组,用于实例化要从 getImageMetadataFormat 返回的元数据格式对象。长度为 0 的数组被标准化为 null
      抛出:
      IllegalArgumentException - 如果 vendorNamenull
      IllegalArgumentException - 如果 versionnull
      IllegalArgumentException - 如果 namesnull 或长度为 0。
      IllegalArgumentException - 如果 readerClassNamenull
      IllegalArgumentException - 如果 inputTypesnull 或长度为 0。
  • 方法详情

    • getInputTypes

      public Class <?>[] getInputTypes()
      返回一个 Class 对象数组,指示哪些类型的对象可以用作读取器的 setInput 方法的参数。

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

      返回:
      长度至少为 1 的 Class 对象的非 null 数组。
    • 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 数组,其中包含所有 ImageWriterSpi 类的完全限定名称,这些类可以理解与此服务提供商关联的 ImageReader 使用的内部元数据表示,如果没有指定这样的 ImageWriter ,则返回 null 。如果返回非 null 值,则它的长度必须非零。

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

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

      返回:
      长度至少为 1 的 String 数组,包含 ImageWriterSpinull 的名称。
      参见: