javax.imageio.spi

接口
java.lang.Object
  继承者 javax.imageio.spi.IIOServiceProvider
      继承者 javax.imageio.spi.ImageReaderWriterSpi
          继承者 javax.imageio.spi.ImageReaderSpi
所有已实现的接口:
RegisterableService

public abstract class ImageReaderSpi
     
extends ImageReaderWriterSpi

用于 ImageReader 的服务提供者接口 (SPI)。有关服务提供者类的更多信息,请参见 IIORegistry 类的注释。

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

使用 getVendorNamegetDescriptiongetVersion 方法可获得定义 SPI 类和此类简明描述的供应商的名称。可将这些方法进行国际化以提供特定于语言环境的输出。这些方法主要用于提供可用于组织弹出菜单或其他列表的简短可读信息。

使用 getFormatNamesgetFileSuffixesgetMIMETypes 方法可获得与此服务有关联的格式名称、文件后缀和 MIME 类型的列表。可以使用这些方法来标识候选 ImageReader,从而基于手动格式选择、文件命名或 MIME 关联(例如,通过 HTTP 访问文件或文件作为电子邮件附件)对特定的文件或流进行解码。

canDecodeInput 方法提供了确定哪些 ImageReader 最有可能解析特定数据流的一条更可靠途径。此方法允许服务提供者检查实际的流内容。

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

另请参见:
IIORegistry, ImageReader

字段摘要
protected  Class[] inputTypes
          将从 getInputTypes 返回的 Class 对象数组,该数组最初为 null
static Class[] STANDARD_INPUT_TYPE
          将从 getInputTypes 返回的单元素数组,该数组最初包含 ImageInputStream.class
protected  String[] writerSpiNames
          将从 getImageWriterSpiNames 返回的字符串数组,该数组最初为 null
 
从类 javax.imageio.spi.ImageReaderWriterSpi 继承的字段
extraImageMetadataFormatClassNames, extraImageMetadataFormatNames, extraStreamMetadataFormatClassNames, extraStreamMetadataFormatNames, MIMETypes, names, nativeImageMetadataFormatClassName, nativeImageMetadataFormatName, nativeStreamMetadataFormatClassName, nativeStreamMetadataFormatName, pluginClassName, suffixes, supportsStandardImageMetadataFormat, supportsStandardStreamMetadataFormat
 
从类 javax.imageio.spi.IIOServiceProvider 继承的字段
vendorName, version
 
构造方法摘要
protected ImageReaderSpi()
          构造一个空的 ImageReaderSpi
  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
 
方法摘要
abstract  boolean canDecodeInput(Object source)
          如果给定的源对象看起来是此 reader 支持的格式,则返回 true
 ImageReader createReaderInstance()
          返回与此服务提供者关联的 ImageReader 实现的实例。
abstract  ImageReader createReaderInstance(Object extension)
          返回与此服务提供者关联的 ImageReader 实现的实例。
 String[] getImageWriterSpiNames()
          返回一个 String 数组,其包含所有能够理解由与此服务提供者关联的 ImageReader 使用的内部元数据表示形式的 ImageWriterSpi 类的完全限定名。
 Class[] getInputTypes()
          返回 Class 对象数组,指示可用作 reader 的 setInput 方法参数的对象类型。
 boolean isOwnReader(ImageReader reader)
          如果传入的 ImageReader 对象为与此服务提供者关联的 ImageReader 的实例,则返回 true
 
从类 javax.imageio.spi.ImageReaderWriterSpi 继承的方法
getExtraImageMetadataFormatNames, getExtraStreamMetadataFormatNames, getFileSuffixes, getFormatNames, getImageMetadataFormat, getMIMETypes, getNativeImageMetadataFormatName, getNativeStreamMetadataFormatName, getPluginClassName, getStreamMetadataFormat, isStandardImageMetadataFormatSupported, isStandardStreamMetadataFormatSupported
 
从类 javax.imageio.spi.IIOServiceProvider 继承的方法
getDescription, getVendorName, getVersion, onDeregistration, onRegistration
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

STANDARD_INPUT_TYPE

public static final Class[] STANDARD_INPUT_TYPE
将从 getInputTypes 返回的单元素数组,该数组最初包含 ImageInputStream.class


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 - 供应商名称,它是一个非 nullString
version - 版本标识符,它是一个非 nullString
names - 指示格式名称的一个非 nullString 数组。必须至少有一个项。
suffixes - 指示常用文件后缀的 String 数组。如果没有定义后缀,则应将其指定为 null。长度为 0 的数组将被标准化为 null
MIMETypes - 指示格式的 MIME 类型的 String 数组。如果没有定义 MIME 类型,则应将其指定为 null。长度为 0 的数组将被标准化为 null
readerClassName - 所关联的 ImageReader 类的完全限定名,它为一个非 nullString
inputTypes - 指示合法输入类型的长度至少为 1 的 Class 对象的非 null 数组。
writerSpiNames - 命名所有与 ImageWriter 关联的类的 String 数组,或者为 null。长度为 0 的数组将被标准化为 null
supportsStandardStreamMetadataFormat - 一个 boolean 值,指示流元数据对象是否可使用由标准元数据格式描述的树。
nativeStreamMetadataFormatName - 从 getNativeStreamMetadataFormatName 返回的一个 String,或者为 null
nativeStreamMetadataFormatClassName - 将用于实例化从 getNativeStreamMetadataFormat 返回的元数据格式对象的 String,或者为 null
extraStreamMetadataFormatNames - 从 getExtraStreamMetadataFormatNames 返回的 String 数组,或者为 null。长度为 0 的数组将被标准化为 null
extraStreamMetadataFormatClassNames - 用于实例化从 getStreamMetadataFormat 返回的元数据格式对象的 String 数组,或者为 null。长度为 0 的数组将被标准化为 null
supportsStandardImageMetadataFormat - 一个 boolean 值,指示图像元数据对象是否可使用由标准元数据格式描述的树。
nativeImageMetadataFormatName - 从 getNativeImageMetadataFormatName 返回的一个 String,或者为 null
nativeImageMetadataFormatClassName - 用于实例化从 getNativeImageMetadataFormat 返回的元数据格式对象的 String,或者为 null
extraImageMetadataFormatNames - 从 getExtraImageMetadataFormatNames 返回的 String 数组。长度为 0 的数组将被标准化为 null
extraImageMetadataFormatClassNames - 用于实例化从 getImageMetadataFormat 返回的元数据格式对象的 String 数组,或者为 null。长度为 0 的数组将被标准化为 null
抛出:
IllegalArgumentException - 如果 vendorNamenull
IllegalArgumentException - 如果 versionnull
IllegalArgumentException - 如果 namesnull 或长度为 0。
IllegalArgumentException - 如果 readerClassNamenull
IllegalArgumentException - 如果 inputTypesnull 或长度为 0。
方法详细信息

getInputTypes

public Class[] getInputTypes()
返回 Class 对象数组,指示可用作 reader 的 setInput 方法参数的对象类型。

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

返回:
null 的长度至少为 1 的 Class 对象数组。

canDecodeInput

public abstract boolean canDecodeInput(Object source)
                                throws IOException
如果给定的源对象看起来是此 reader 支持的格式,则返回 true。从此方法返回 true 并不保证将成功读取,只表示基于对流内容的简明检查应该有机会成功。如果此源为 ImageInputStream,实现通常将首先检查流的前几个字节以获取与格式关联的“幻数”。实际的读取已开始后,在解码完成之前的任何时间 reader 仍有可能指示失败。

对象的状态不受影响非常重要,这样其他的 ImageReaderSpi 才能够正确确定它们是否能解码此对象。特别地,如果该源为 ImageInputStream,应使用 mark/reset 对保护此流的位置。

对于可能尝试读取几乎所有流的格式(比如“原始”格式),为避免因采用更相近的匹配而引起调用,应返回 false

如果 source 不是由 getInputTypes 返回的类之一的实例,此方法应只返回 false

参数:
source - 要解码的对象(通常是一个 ImageInputStream)。
返回:
如果此流可能解码,则返回 true
抛出:
IllegalArgumentException - 如果 sourcenull
IOException - 如果读取该流时发生 I/O 错误。

createReaderInstance

public ImageReader createReaderInstance()
                                 throws IOException
返回与此服务提供者关联的 ImageReader 实现的实例。返回的对象初始时处于初始状态,好像调用过其 reset 方法。

默认实现只返回 createReaderInstance(null)

返回:
一个 ImageReader 实例。
抛出:
IOException - 如果加载或初始化 reader 类时发生错误,或在初始化或实例化 reader 对象时发生错误。

createReaderInstance

public abstract ImageReader createReaderInstance(Object extension)
                                          throws IOException
返回与此服务提供者关联的 ImageReader 实现的实例。返回的对象初始时处于初始状态,好像调用过其 reset 方法。

可以在构造时向插件提供 Object。对象的本质完全由插件决定。

通常情况下,插件将使用类似 return new MyImageReader(this) 的代码实现此方法。

参数:
extension - 特定于插件的扩展对象,它可以为 null
返回:
一个 ImageReader 实例。
抛出:
IOException - 如果实例化此 reader 的尝试失败。
IllegalArgumentException - 如果 ImageReader 构造方法抛出一个 IllegalArgumentException,以指示此扩展对象不适合在这里使用。

isOwnReader

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

默认的实现将 reader 参数的完全限定类名与传给构造方法的类名进行比较。如果需要更复杂的检查,可重写此方法。

参数:
reader - 一个 ImageReader 实例。
返回:
如果 reader 可识别,则返回 true
抛出:
IllegalArgumentException - 如果 readernull

getImageWriterSpiNames

public String[] getImageWriterSpiNames()
返回一个 String 数组,其包含所有能够理解由与此服务提供者关联的 ImageReader 使用的内部元数据表示形式的 ImageWriterSpi 类的完全限定名。或者如果没有指定这样的 ImageWriter,则返回 null。如果返回了非 null 的值,则其长度一定不为零。

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

使用此机制可获取将能够理解由 ImageReader 生成的非像素元数据的内部结构(请参见 IIOTreeInfo)的 ImageWriters。通过从 ImageReader 获取此数据并将其传给使用此方法获取的 ImageWriters 之一,客户端程序可读取图像、进行某些修改并写回图像,同时保留所有的元数据,而不需要理解有关此元数据的任何事情,甚至图像的格式都不需知道。

返回:
包含 ImageWriterSpi 名称的长度至少为 1 的 String 数组,或者返回 null
另请参见:
ImageIO.getImageWriter(ImageReader)