public class InputSource extends Object
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY. See http://www.saxproject.org for further information.
该类允许SAX应用程序将关于输入源的信息封装在单个对象中,该对象可以包括公共标识符,系统标识符,字节流(可能具有指定的编码)和/或字符流。
应用程序可以将两个地方传递给解析器的输入源: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
Constructor and Description |
---|
InputSource()
零参数默认构造函数。
|
InputSource(InputStream byteStream)
创建一个带有字节流的新输入源。
|
InputSource(Reader characterStream)
创建一个带有字符流的新输入源。
|
InputSource(String systemId)
创建一个带有系统标识符的新输入源。
|
Modifier and Type | Method and Description |
---|---|
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)
设置此输入源的系统标识符。
|
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建议的第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)