java.lang.Object org.xml.sax.InputSource
public class InputSource
XML 实体的单一输入源。
此模块(包括源代码和文档)在公共域中,同时 没有担保。有关更多信息,请参阅 http://www.saxproject.org。
此类允许 SAX 应用程序封装有关单个对象中的输入源的信息,它可包括公共标识符、系统标识符、字节流(可能带有指定的编码)、基本 URI 和/ 或字符流。
在以下两种情况下应用程序可以将输入源提供给解析器:作为 Parser.parse 方法的参数,或者作为 EntityResolver.resolveEntity 方法的返回值。
SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有字符流可用,则解析器将直接读取该流,而忽略该流中找到的任何文本编码声明。如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使用在 InputSource 中指定的编码,或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接。
InputSource 对象属于该应用程序:SAX 解析器将不会以任何方式修改它(它可以在必要时修改副本)。但是,作为解析终止清除的一部分,对字节流和字符流的标准处理就是关闭这二者,因此在将此类流传递给解析器后应用程序不应尝试重新使用它们。
XMLReader.parse(org.xml.sax.InputSource)
,
EntityResolver.resolveEntity(java.lang.String, java.lang.String)
,
InputStream
,
Reader
构造方法摘要 | |
---|---|
InputSource() 零参数默认构造方法。 |
|
InputSource(InputStream byteStream) 使用字节流创建新的输入源。 |
|
InputSource(Reader characterStream) 使用字符流创建新的输入源。 |
|
InputSource(String systemId) 使用系统标识符创建新的输入源。 |
方法摘要 | |
---|---|
InputStream |
getByteStream() 获取此输入源的字节流。 |
Reader |
getCharacterStream() 获取此输入源的字符流。 |
String |
getEncoding() 获取字节流或 URI 的字符编码。 |
String |
getPublicId() 获取此输入源的公共标识符。 |
String |
getSystemId() 获取此输入源的系统标识符。 |
void |
setByteStream(InputStream byteStream) 设置此输入源的字节流。 |
void |
setCharacterStream(Reader characterStream) 设置此输入源的字符流。 |
void |
setEncoding(String encoding) 设置字符编码(如果已知)。 |
void |
setPublicId(String publicId) 设置此输入源的公共标识符。 |
void |
setSystemId(String systemId) 设置此输入源的系统标识符。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public InputSource()
public InputSource(String systemId)
应用程序可以使用 setPublicId 将公共标识符包括在内,也可以使用 setEncoding 来指定字符编码(如果已知)。
如果系统标识符是 URL,则必须完整解析它(它不可以是相对 URL)。
systemId
- 系统标识符 (URI)。
setPublicId(java.lang.String)
,
setSystemId(java.lang.String)
,
setByteStream(java.io.InputStream)
,
setEncoding(java.lang.String)
,
setCharacterStream(java.io.Reader)
public InputSource(InputStream byteStream)
应用程序编写者必须使用 setSystemId() 为解析相对 URI 提供基,还可以使用 setPublicId 将公共标识符包括在内,并且可以使用 setEncoding 来指定对象的字符编码。
byteStream
- 包含文档的原始字节流。
setPublicId(java.lang.String)
,
setSystemId(java.lang.String)
,
setEncoding(java.lang.String)
,
setByteStream(java.io.InputStream)
,
setCharacterStream(java.io.Reader)
public InputSource(Reader characterStream)
应用程序编写者必须使用 setSystemId() 为解析相对 URI 提供基,并且可以使用 setPublicId 将公共标识符包括在内。
字符流不能包括字节顺序标记。
方法详细信息 |
---|
public void setPublicId(String publicId)
公共标识符始终为可选的:如果应用程序编写者包括一个公共标识符,则将把它作为位置信息的一部分提供。
publicId
- 字符串形式的公共标识符。
getPublicId()
,
Locator.getPublicId()
,
SAXParseException.getPublicId()
public String getPublicId()
setPublicId(java.lang.String)
public void setSystemId(String systemId)
如果有字节流或字符流,则系统标识符是可选的,但提供系统标识符非常有用,这是因为应用程序可以使用它解析相对 URI,并且可以将它包含在错误消息和警告中(解析器仅在未指定字节流或字符流时尝试打开到 URI 的连接)。
如果应用程序知道系统标识符所指向的对象的字符编码,则可以使用 setEncoding 方法来注册编码。
如果系统标识符是 URL,则必须完整解析它(它不可以是相对 URL)。
systemId
- 字符串形式的系统标识符。
setEncoding(java.lang.String)
,
getSystemId()
,
Locator.getSystemId()
,
SAXParseException.getSystemId()
public String getSystemId()
getEncoding 方法将返回所指向对象的字符编码,如果未知,则返回 null。
如果系统 ID 是 URL,则将完整解析它。
setSystemId(java.lang.String)
,
getEncoding()
public void setByteStream(InputStream byteStream)
如果还有指定的字符流,则 SAX 解析器将忽略此操作,它将优先于打开自己 URI 连接而使用字节流。
如果应用程序知道字节流的字符编码,则必须使用 setEncoding 方法设置它。
byteStream
- 包含 XML 文档或其他实体的字节流。
setEncoding(java.lang.String)
,
getByteStream()
,
getEncoding()
,
InputStream
public InputStream getByteStream()
getEncoding 方法将返回此字节流的字符编码,如果未知,则返回 null。
getEncoding()
,
setByteStream(java.io.InputStream)
public void setEncoding(String encoding)
编码必须是 XML 编码声明可接受的字符串(参见 "XML 1.0 recommendation" 的 4.3.3 节)。
当应用程序提供字符流时,此方法无效。
encoding
- 描述字符编码的字符串。
setSystemId(java.lang.String)
,
setByteStream(java.io.InputStream)
,
getEncoding()
public String getEncoding()
setByteStream(java.io.InputStream)
,
getSystemId()
,
getByteStream()
public void setCharacterStream(Reader characterStream)
如果有指定的字符流,则 SAX 解析器将忽略任何字节流,并且不尝试打开到系统标识符的 URI 连接。
characterStream
- 包含 XML 文档或其他实体的字符流。
getCharacterStream()
,
Reader
public Reader getCharacterStream()
setCharacterStream(java.io.Reader)