java.lang.Object javax.imageio.spi.IIOServiceProvider javax.imageio.spi.ImageReaderWriterSpi javax.imageio.spi.ImageReaderSpi
public abstract class ImageReaderSpi
用于 ImageReader
的服务提供者接口 (SPI)。有关服务提供者类的更多信息,请参见 IIORegistry
类的注释。
每个 ImageReaderSpi
都提供了有关与之关联的 ImageReader
类的几种类型的信息。
使用 getVendorName
、getDescription
和 getVersion
方法可获得定义 SPI 类和此类简明描述的供应商的名称。可将这些方法进行国际化以提供特定于语言环境的输出。这些方法主要用于提供可用于组织弹出菜单或其他列表的简短可读信息。
使用 getFormatNames
、getFileSuffixes
和 getMIMETypes
方法可获得与此服务有关联的格式名称、文件后缀和 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.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.IIOServiceProvider 继承的方法 |
---|
getDescription, getVendorName, getVersion, onDeregistration, onRegistration |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static final Class[] STANDARD_INPUT_TYPE
getInputTypes
返回的单元素数组,该数组最初包含
ImageInputStream.class
。
protected Class[] inputTypes
getInputTypes
返回的
Class
对象数组,该数组最初为
null
。
protected String[] writerSpiNames
getImageWriterSpiNames
返回的字符串数组,该数组最初为
null
。
构造方法详细信息 |
---|
protected 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
数组。如果没有定义后缀,则应将其指定为
null
。长度为 0 的数组将被标准化为
null
。
MIMETypes
- 指示格式的 MIME 类型的
String
数组。如果没有定义 MIME 类型,则应将其指定为
null
。长度为 0 的数组将被标准化为
null
。
readerClassName
- 所关联的
ImageReader
类的完全限定名,它为一个非
null
的
String
。
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
- 如果
vendorName
为
null
。
IllegalArgumentException
- 如果
version
为
null
。
IllegalArgumentException
- 如果
names
为
null
或长度为 0。
IllegalArgumentException
- 如果
readerClassName
为
null
。
IllegalArgumentException
- 如果
inputTypes
为
null
或长度为 0。
方法详细信息 |
---|
public Class[] getInputTypes()
Class
对象数组,指示可用作 reader 的
setInput
方法参数的对象类型。
对于大多数只接受来自 ImageInputStream
的输入的 reader,应返回一个包含 ImageInputStream.class
的单元素数组。
null
的长度至少为 1 的
Class
对象数组。
public abstract boolean canDecodeInput(Object source) throws IOException
true
。从此方法返回
true
并不保证将成功读取,只表示基于对流内容的简明检查应该有机会成功。如果此源为
ImageInputStream
,实现通常将首先检查流的前几个字节以获取与格式关联的“幻数”。实际的读取已开始后,在解码完成之前的任何时间 reader 仍有可能指示失败。
对象的状态不受影响非常重要,这样其他的 ImageReaderSpi
才能够正确确定它们是否能解码此对象。特别地,如果该源为 ImageInputStream
,应使用 mark
/reset
对保护此流的位置。
对于可能尝试读取几乎所有流的格式(比如“原始”格式),为避免因采用更相近的匹配而引起调用,应返回 false
。
如果 source
不是由 getInputTypes
返回的类之一的实例,此方法应只返回 false
。
source
- 要解码的对象(通常是一个
ImageInputStream
)。
true
。
IllegalArgumentException
- 如果
source
为
null
。
IOException
- 如果读取该流时发生 I/O 错误。
public ImageReader createReaderInstance() throws IOException
ImageReader
实现的实例。返回的对象初始时处于初始状态,好像调用过其
reset
方法。
默认实现只返回 createReaderInstance(null)
。
ImageReader
实例。
IOException
- 如果加载或初始化 reader 类时发生错误,或在初始化或实例化 reader 对象时发生错误。
public abstract ImageReader createReaderInstance(Object extension) throws IOException
ImageReader
实现的实例。返回的对象初始时处于初始状态,好像调用过其
reset
方法。
可以在构造时向插件提供 Object
。对象的本质完全由插件决定。
通常情况下,插件将使用类似 return new MyImageReader(this)
的代码实现此方法。
extension
- 特定于插件的扩展对象,它可以为
null
。
ImageReader
实例。
IOException
- 如果实例化此 reader 的尝试失败。
IllegalArgumentException
- 如果
ImageReader
构造方法抛出一个
IllegalArgumentException
,以指示此扩展对象不适合在这里使用。
public boolean isOwnReader(ImageReader reader)
ImageReader
对象为与此服务提供者关联的
ImageReader
的实例,则返回
true
。
默认的实现将 reader
参数的完全限定类名与传给构造方法的类名进行比较。如果需要更复杂的检查,可重写此方法。
reader
- 一个
ImageReader
实例。
reader
可识别,则返回
true
。
IllegalArgumentException
- 如果
reader
为
null
。
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)