SAX - альтернатива стандартному парсеру DOM, который в силу особенностей реализации (создание в памяти объекта XMLDocument, содержащего целиком весь файл), подходит только для распарсивания маленьких xml-документов.
Фишка парсера в том, что поток InputStream обрабатывается последовательно и к тем или иным событиям применяется пользовательская логика:
Фишка парсера в том, что поток InputStream обрабатывается последовательно и к тем или иным событиям применяется пользовательская логика:
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser; parser = factory.newSAXParser(); MySAXParser prsHandler = new MySAXParser(); parser.parse(is, prsHandler);, где is - объект класса InputStream, MySAXParser - класс с перекрытыми методами обработки событий
public class MySAXParser extends DefaultHandler{ private String currentParameterTypes; private String currentQName; @Override public void startDocument(){ //событие начала парсинга System.out.println("start parse document;"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes){ // встретили элемент this.currentParameterTypes = qName; } @Override public void endElement(String uri, String localName, String qName){ // вышли из элемента } @Override public void characters(char[] ch, int start, int length) throws SAXException { // получает значение тега/атрибута this.currentParameterTypes String value = new String(ch, start, length); } }Ниже - график заполнения heap'a во время распарсивания файда в 150МБ.
Комментариев нет :
Отправить комментарий