- 所有已实现的接口:
-
RegisterableService
ImageReader
的服务提供者接口(SPI)。有关服务提供者类的更多信息,请参阅IIORegistry
类的类注释。
每个ImageReaderSpi
提供了关于其关联的ImageReader
类的多种信息。
通过getVendorName
、getDescription
和getVersion
方法可以获取定义SPI类的供应商名称和类的简要描述。这些方法可以国际化以提供特定于区域设置的输出。这些方法主要用于提供可用于组织弹出菜单或其他列表的简短、易读的信息。
可以通过getFormatNames
、getFileSuffixes
和getMIMETypes
方法获取与服务关联的格式名称、文件后缀和MIME类型的列表。这些方法可用于根据手动格式选择、文件命名或MIME关联(例如,在通过HTTP访问文件或作为电子邮件附件时)识别用于解码特定文件或流的候选ImageReader
。
通过canDecodeInput
方法提供了一种更可靠的方法来确定哪些ImageReader
可能能够解析特定的数据流。此方法允许服务提供者检查实际流内容。
最后,可以通过调用createReaderInstance
方法获取与此服务提供者关联的ImageReader
类的实例。任何繁重的初始化,如加载本机库或创建大型表,都应至少推迟到第一次调用此方法之前。
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionprotected Class<?>[]
要从getInputTypes
返回的Class
对象数组,最初为null
。static final Class<?>[]
已弃用。protected String[]
要从getImageWriterSpiNames
返回的字符串数组,最初为null
。Fields declared in class javax.imageio.spi.ImageReaderWriterSpi
extraImageMetadataFormatClassNames, extraImageMetadataFormatNames, extraStreamMetadataFormatClassNames, extraStreamMetadataFormatNames, MIMETypes, names, nativeImageMetadataFormatClassName, nativeImageMetadataFormatName, nativeStreamMetadataFormatClassName, nativeStreamMetadataFormatName, pluginClassName, suffixes, supportsStandardImageMetadataFormat, supportsStandardStreamMetadataFormat
Fields declared in class javax.imageio.spi.IIOServiceProvider
vendorName, version
-
Constructor Summary
ModifierConstructorDescriptionprotected
构造一个空白的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
。 -
Method Summary
Modifier and TypeMethodDescriptionabstract boolean
canDecodeInput
(Object source) 如果提供的源对象似乎是此读取器支持的格式,则返回true
。返回与此服务提供者关联的ImageReader
实现的实例。abstract ImageReader
createReaderInstance
(Object extension) 返回与此服务提供者关联的ImageReader
实现的实例。String[]
返回包含所有能理解与此服务提供者关联的ImageReader
使用的内部元数据表示的ImageWriterSpi
类的完全限定名称的String
数组,如果没有指定这样的ImageWriter
,则返回null
。Class<?>[]
返回一个Class
对象数组,指示可以用作读取器的setInput
方法的参数类型。boolean
isOwnReader
(ImageReader reader) 如果传入的ImageReader
对象是与此服务提供者关联的ImageReader
的实例,则返回true
。Methods declared in class javax.imageio.spi.ImageReaderWriterSpi
getExtraImageMetadataFormatNames, getExtraStreamMetadataFormatNames, getFileSuffixes, getFormatNames, getImageMetadataFormat, getMIMETypes, getNativeImageMetadataFormatName, getNativeStreamMetadataFormatName, getPluginClassName, getStreamMetadataFormat, isStandardImageMetadataFormatSupported, isStandardStreamMetadataFormatSupported
Methods declared in class javax.imageio.spi.IIOServiceProvider
getDescription, getVendorName, getVersion, onDeregistration, onRegistration
-
Field Details
-
STANDARD_INPUT_TYPE
Deprecated.Instead of using this field, directly create the equivalent array{ ImageInputStream.class }
.从getInputTypes
返回的初始包含ImageInputStream.class
的单元素数组。 -
inputTypes
要从getInputTypes
返回的Class
对象数组,最初为null
。 -
writerSpiNames
要从getImageWriterSpiNames
返回的字符串数组,最初为null
。
-
-
Constructor Details
-
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
数组。如果未定义后缀,则应提供null
。长度为0的数组将被规范化为null
。 -
MIMETypes
- 包含格式的MIME类型的String
数组。如果未定义MIME类型,则应提供null
。长度为0的数组将被规范化为null
。 -
readerClassName
- 关联的ImageReader
类的完全限定名称,作为非null String
。 -
inputTypes
- 长度至少为1的Class
对象数组,指示合法的输入类型。 -
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。
-
-
Method Details
-
getInputTypes
返回一个Class
对象数组,指示可以用作读取器的setInput
方法的参数类型。对于大多数只接受来自
ImageInputStream
的输入的读取器,应返回包含ImageInputStream.class
的单元素数组。- 返回:
-
至少包含1个元素的非
null
的Class
对象数组。
-
canDecodeInput
如果提供的源对象似乎是此读取器支持的格式,则返回true
。从此方法返回true
并不保证读取将成功,只是根据对流内容的简要检查,似乎有合理的成功机会。如果源是ImageInputStream
,实现通常会检查流的前几个字节,以查找与格式相关联的“魔数”。一旦实际读取开始,读取器仍可能在解码完成之前的任何时间指示失败。重要的是不要破坏对象的状态,以便其他
ImageReaderSpi
可以正确确定它们是否能够解码对象。特别是,如果源是ImageInputStream
,应使用mark
/reset
对来保留流位置。诸如“原始”之类的格式,可能尝试读取几乎任何流的格式,应返回
false
,以避免在优先于更接近匹配的情况下被调用。如果
source
不是由getInputTypes
返回的类之一的实例,则该方法应简单地返回false
。- 参数:
-
source
- 要解码的对象(通常是一个ImageInputStream
)。 - 返回:
-
true
如果可能可以解码此流。 - 抛出:
-
IllegalArgumentException
- 如果source
为null
。 -
IOException
- 如果在读取流时发生I/O错误。
-
createReaderInstance
返回与此服务提供者关联的ImageReader
实现的实例。返回的对象最初将处于初始状态,就好像其reset
方法已被调用一样。默认实现只是返回
createReaderInstance(null)
。- 返回:
-
一个
ImageReader
实例。 - 抛出:
-
IOException
- 如果在加载、初始化读取器类、实例化或初始化读取器对象期间发生错误。
-
createReaderInstance
返回与此服务提供者关联的ImageReader
实现的实例。返回的对象最初将处于初始状态,就好像其reset
方法已被调用一样。可能会在构造时向插件提供一个
Object
。对象的性质完全取决于插件。通常,插件将使用类似
return new MyImageReader(this)
的代码来实现此方法。- 参数:
-
extension
- 插件特定的扩展对象,可以为null
。 - 返回:
-
一个
ImageReader
实例。 - 抛出:
-
IOException
- 如果尝试实例化读取器失败。 -
IllegalArgumentException
- 如果ImageReader
的构造函数抛出IllegalArgumentException
以指示扩展对象不合适。
-
isOwnReader
如果传入的ImageReader
对象是与此服务提供者关联的ImageReader
的实例,则返回true
。默认实现将
reader
参数的完全限定类名与传递给构造函数的类名进行比较。如果需要更复杂的检查,可以重写此方法。- 参数:
-
reader
- 一个ImageReader
实例。 - 返回:
-
如果
reader
被识别,则返回true
。 - 抛出:
-
IllegalArgumentException
- 如果reader
为null
。
-
getImageWriterSpiNames
返回一个包含所有能理解与此服务提供者关联的ImageReader
使用的内部元数据表示的ImageWriterSpi
类的完全限定名称的String
数组,如果没有指定这样的ImageWriter
,则返回null
。如果返回非null
值,则其长度必须为非零。数组中的第一项必须是“首选”写入器的服务提供者的名称,因为它将用于实例化
ImageIO.getImageWriter(ImageReader)
返回的ImageWriter
。此机制可用于获取将理解由
ImageReader
生成的非像素元数据内部结构(参见IIOTreeInfo
)的ImageWriters
。通过从ImageReader
获取此数据并将其传递给使用此方法获取的ImageWriters
之一,客户端程序可以读取图像,以某种方式修改它,并在保留所有元数据的同时将其写回,而无需了解任何关于元数据的内部结构,甚至关于图像格式的信息。- 返回:
-
至少包含1个
ImageWriterSpi
名称的String
数组,或null
。 - 参见:
-
{ ImageInputStream.class }
。