hasNext()如何与字符的流读取一起工作?

时间:2019-03-24 06:45:33

标签: java xml

我试图了解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);
     }

这里fPeekedEventXMLEvent,只是想知道何时(eventReader.hasNext())被调用,它在构造时是否调用fXMLEventAllocator.allocate(fXMLReader)(分配给fPeekedEvent每次XMLEventReaderImpl个实例)?如果是,它将检查已提取的字符流,然后返回。但是该流在哪里运行并保持字符可用,以便eventReader.hasNext()可以在此之上运行?

如果是,则几天后就会停留在这里,如何从Stream读取器(FileReader)以及从何处获取数据?

任何帮助将不胜感激..!

谢谢...!

0 个答案:

没有答案
相关问题