我试图了解hasNext调用如何工作以获取下面的代码片段中的下一个数据流。这段代码来自STAX解析器。
创建XMLEventReaderImpl
的第一个实例,如下所示。
XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(file));
{
XMLEvent xmlEvent = eventReader.nextEvent();
System.out.println("xmlEvent:"+xmlEvent);
if (xmlEvent.isStartElement())
{
StartElement startElement = xmlEvent.asStartElement();
so on.....
下面是获取XMLEventReaderImpl
类实例的步骤
public XMLEventReader createXMLEventReader(Reader reader) throws XMLStreamException {
initEventReader();
//delegate everything to XMLStreamReader
return new XMLEventReaderImpl(createXMLStreamReader(reader));
}
public XMLStreamReader createXMLStreamReader(Reader reader) throws XMLStreamException {
XMLInputSource inputSource = new XMLInputSource(null, null, null, reader, null);
return getXMLStreamReaderImpl(inputSource);
}
XMLStreamReader getXMLStreamReaderImpl(XMLInputSource inputSource) throws javax.xml.stream.XMLStreamException{
if(fTempReader == null){
fPropertyChanged = false;
return fTempReader = new XMLStreamReaderImpl(inputSource,
new PropertyManager(fPropertyManager));
}
public XMLEventReaderImpl(XMLStreamReader reader) throws XMLStreamException {
fXMLReader = reader ;
fXMLEventAllocator = (XMLEventAllocator)reader.getProperty(XMLInputFactory.ALLOCATOR);
if(fXMLEventAllocator == null){
fXMLEventAllocator = new XMLEventAllocatorImpl();
}
fPeekedEvent = fXMLEventAllocator.allocate(fXMLReader);
}
这里fPeekedEvent
是XMLEvent
,只是想知道何时(eventReader.hasNext()
)被调用,它在构造时是否调用fXMLEventAllocator.allocate(fXMLReader)
(分配给fPeekedEvent
每次XMLEventReaderImpl
个实例)?如果是,它将检查已提取的字符流,然后返回。但是该流在哪里运行并保持字符可用,以便eventReader.hasNext()
可以在此之上运行?
如果是,则几天后就会停留在这里,如何从Stream读取器(FileReader
)以及从何处获取数据?
任何帮助将不胜感激..!
谢谢...!