此类允许 SAX 应用程序将有关输入源的信息封装在单个对象中,该对象可能包括公共标识符、系统标识符、字节流(可能具有指定的编码)和/或字符流。
应用程序可以在两个地方将输入源传递给解析器:作为 Parser.parse 方法的参数,或作为 EntityResolver.resolveEntity 方法的返回值。
SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有可用的字符流,解析器将直接读取该流,而忽略在该流中找到的任何文本编码声明。如果没有字符流,但有字节流,解析器将使用该字节流,使用 InputSource 中指定的编码,否则(如果未指定编码)使用算法自动检测字符编码,例如XML 规范。如果字符流和字节流都不可用,解析器将尝试打开一个 URI 连接到由系统标识符标识的资源。
InputSource 对象属于应用程序:SAX 解析器永远不会以任何方式修改它(如果需要,它可能会修改副本)。但是,字节流和字符流的标准处理是将它们作为解析结束清理的一部分关闭,因此应用程序不应在将此类流交给解析器后尝试重新使用它们。
- 自从:
- 1.4, SAX 1.0
- 参见:
-
构造方法总结
构造方法构造方法描述零参数默认构造方法。InputSource
(InputStream byteStream) 使用字节流创建一个新的输入源。InputSource
(Reader characterStream) 使用字符流创建一个新的输入源。InputSource
(String systemId) 使用系统标识符创建一个新的输入源。 -
方法总结
修饰符和类型方法描述获取此输入源的字节流。获取此输入源的字符流。获取字节流或 URI 的字符编码。获取此输入源的公共标识符。获取此输入源的系统标识符。boolean
isEmpty()
指示InputSource
对象是否为空。void
setByteStream
(InputStream byteStream) 为此输入源设置字节流。void
setCharacterStream
(Reader characterStream) 为此输入源设置字符流。void
setEncoding
(String encoding) 设置字符编码(如果已知)。void
setPublicId
(String publicId) 设置此输入源的公共标识符。void
setSystemId
(String systemId) 设置此输入源的系统标识符。
-
构造方法详细信息
-
InputSource
public InputSource()零参数默认构造方法。- 参见:
-
InputSource
使用系统标识符创建一个新的输入源。应用程序也可以使用 setPublicId 来包含公共标识符,或者使用 setEncoding 来指定字符编码(如果已知)。
如果系统标识符是一个 URL,它必须被完全解析(它可能不是一个相对 URL)。
- 参数:
systemId
- 系统标识符 (URI)。- 参见:
-
InputSource
使用字节流创建一个新的输入源。应用程序编写者应该使用 setSystemId() 来提供解析相对 URI 的基础,可以使用 setPublicId 来包含公共标识符,并且可以使用 setEncoding 来指定对象的字符编码。
- 参数:
byteStream
- 包含文档的原始字节流。- 参见:
-
InputSource
使用字符流创建一个新的输入源。应用程序编写者应该使用 setSystemId() 来提供解析相对 URI 的基础,并且可以使用 setPublicId 来包含公共标识符。
字符流不应包含字节顺序标记。
- 参数:
characterStream
- 字符流- 参见:
-
-
方法详情
-
setPublicId
设置此输入源的公共标识符。公共标识符始终是可选的:如果应用程序编写者包含一个公共标识符,它将作为位置信息的一部分提供。
- 参数:
publicId
- 作为字符串的公共标识符。- 参见:
-
getPublicId
获取此输入源的公共标识符。- 返回:
- 公共标识符,如果未提供则为 null。
- 参见:
-
setSystemId
设置此输入源的系统标识符。如果有字节流或字符流,系统标识符是可选的,但提供一个系统标识符仍然有用,因为应用程序可以使用它来解析相对 URI,并可以将其包含在错误消息和警告中(解析器将尝试仅当未指定字节流或字符流时才打开到 URI 的连接)。
如果应用程序知道系统标识符指向的对象的字符编码,它可以使用 setEncoding 方法注册编码。
如果系统标识符是一个 URL,它必须被完全解析(它可能不是一个相对 URL)。
- 参数:
systemId
- 作为字符串的系统标识符。- 参见:
-
getSystemId
获取此输入源的系统标识符。getEncoding 方法将返回指向对象的字符编码,如果未知则返回 null。
如果系统 ID 是一个 URL,它将被完全解析。
- 返回:
- 系统标识符,如果未提供则为 null。
- 参见:
-
setByteStream
为此输入源设置字节流。如果还指定了字符流,SAX 解析器将忽略它,但它会优先使用字节流而不是自己打开 URI 连接。
如果应用程序知道字节流的字符编码,则应使用 setEncoding 方法对其进行设置。
- 参数:
byteStream
- 包含 XML 文档或其他实体的字节流。- 参见:
-
getByteStream
获取此输入源的字节流。getEncoding 方法将返回此字节流的字符编码,如果未知则返回 null。
- 返回:
- 字节流,如果未提供则为 null。
- 参见:
-
setEncoding
设置字符编码(如果已知)。编码必须是 XML 编码声明可接受的字符串(请参阅 XML 1.0 推荐的第 4.3.3 节)。
当应用程序提供字符流时,此方法无效。
- 参数:
encoding
- 描述字符编码的字符串。- 参见:
-
getEncoding
获取字节流或 URI 的字符编码。当应用程序提供字符流时,该值将被忽略。- 返回:
- 编码,如果未提供则为 null。
- 参见:
-
setCharacterStream
为此输入源设置字符流。如果指定了字符流,SAX 解析器将忽略任何字节流,并且不会尝试打开到系统标识符的 URI 连接。
- 参数:
characterStream
- 包含 XML 文档或其他实体的字符流。- 参见:
-
getCharacterStream
获取此输入源的字符流。- 返回:
- 字符流,如果未提供则为 null。
- 参见:
-
isEmpty
public boolean isEmpty()指示InputSource
对象是否为空。空定义如下:- 所有输入源,包括公共标识符、系统标识符、字节流和字符流,都是
null
。 - 公共标识符和系统标识符是
null
,字节流和字符流要么是null
要么不包含字节或字符。请注意,如果提供了字节流,此方法将重置字节流,如果未提供字节流,则重置字符流。
如果在检查字节流或字符流时出错,该方法将返回 false 以允许 XML 处理器处理错误。
- 返回:
-
如果
InputSource
对象为空,则为真,否则为假
- 所有输入源,包括公共标识符、系统标识符、字节流和字符流,都是
-