这个类允许SAX应用程序将有关输入源的信息封装在一个对象中,该对象可以包括公共标识符、系统标识符、字节流(可能带有指定的编码)和/或字符流。
应用程序可以将输入源传递给解析器的两个地方:作为Parser.parse方法的参数,或作为EntityResolver.resolveEntity方法的返回值。
SAX解析器将使用InputSource对象来确定如何读取XML输入。如果有字符流可用,解析器将直接读取该流,忽略在该流中找到的任何文本编码声明。如果没有字符流,但有字节流,解析器将使用该字节流,使用InputSource中指定的编码,否则(如果未指定编码)使用诸如XML规范中的算法之类的算法自动检测字符编码。如果既没有字符流也没有字节流可用,解析器将尝试打开到由系统标识符标识的资源的URI连接。
InputSource对象属于应用程序:SAX解析器绝不会以任何方式修改它(如果必要,它可以修改副本)。但是,对字节流和字符流的标准处理是在解析结束时将它们关闭,因此应用程序不应尝试在将它们交给解析器后重用这些流。
- 自从:
- 1.4, SAX 1.0
- 另请参阅:
-
Constructor Summary
ConstructorDescription无参数默认构造函数。InputSource
(InputStream byteStream) 使用字节流创建一个新的输入源。InputSource
(Reader characterStream) 使用字符流创建一个新的输入源。InputSource
(String systemId) 使用系统标识符创建一个新的输入源。 -
Method Summary
Modifier and TypeMethodDescription获取此输入源的字节流。获取此输入源的字符流。获取字节流或URI的字符编码。获取此输入源的公共标识符。获取此输入源的系统标识符。boolean
isEmpty()
指示InputSource
对象是否为空。void
setByteStream
(InputStream byteStream) 为此输入源设置字节流。void
setCharacterStream
(Reader characterStream) 为此输入源设置字符流。void
setEncoding
(String encoding) 设置字符编码(如果已知)。void
setPublicId
(String publicId) 设置此输入源的公共标识符。void
setSystemId
(String systemId) 设置此输入源的系统标识符。
-
Constructor Details
-
InputSource
public InputSource()无参数默认构造函数。- 另请参阅:
-
InputSource
使用系统标识符创建一个新的输入源。应用程序可以使用setPublicId包含公共标识符,或使用setEncoding指定字符编码(如果已知)。
如果系统标识符是URL,则必须完全解析(不能是相对URL)。
- 参数:
-
systemId
- 系统标识符(URI)。 - 另请参阅:
-
InputSource
使用字节流创建一个新的输入源。应用程序编写者应使用setSystemId()提供用于解析相对URI的基础,可以使用setPublicId包含公共标识符,并可以使用setEncoding指定对象的字符编码。
- 参数:
-
byteStream
- 包含文档的原始字节流。 - 另请参阅:
-
InputSource
使用字符流创建一个新的输入源。应用程序编写者应使用setSystemId()提供用于解析相对URI的基础,并可以使用setPublicId包含公共标识符。
字符流不得包含字节顺序标记。
- 参数:
-
characterStream
- 字符流 - 另请参阅:
-
-
Method Details
-
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
对象为空,则为true,否则为false
- 所有输入源,包括公共标识符、系统标识符、字节流和字符流,都为
-