ArrayIndexOutOfBoundsException при разборе xerces - PullRequest
0 голосов
/ 17 декабря 2009

Я не знаю, где проблема ... Помощь и спасибо!

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8192

на com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read (UTF8Reader.java:543) на com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load (XMLEntityScanner.java:1742) на com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity (XMLEntityScanner.java:1619) на com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString (XMLEntityScanner.java:1657) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (XMLDocumentFragmentScannerImpl.java:1740) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next (XMLDocumentFragmentScannerImpl.java:2930) на com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:648) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:510) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:807) в com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:737) в com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:107) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1205) в com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse (SAXParserImpl.java:522) в javax.xml.parsers.SAXParser.parse (SAXParser.java:395) в javax.xml.parsers.SAXParser.parse (SAXParser.java:277) в myPackage.MainClass.main (MainClass.java:39)

В основном классе, код структуры, как показано ниже:

SAXParserFactory sf = SAXParserFactory.newInstance();   
SAXParser sax = sf.newSAXParser();   
sax.parse("english.xml", new DefaultElementHandler("page"){   
public void processElement(Element element) { 
// process the element
}
}); 

XML-файл имеет большой размер 4G и полон текста, мне нужно проанализировать файл и обработать текст.

В настоящее время я ничего не делал с частью процесса, просто хотел распечатать их в консоли. Тогда ООБ ...

1 Ответ

0 голосов
/ 17 декабря 2009

Возможно, вы захотите распечатать сообщение об ошибке, сопровождающее эту трассировку стека. Вы можете сделать это, добавив вызов к System.err.println(e.getMessage()), где e является исключением. Сообщение должно дать вам индекс, который пытался получить доступ.

Если индекс отрицательный, то, скорее всего, переполнение целого числа. Если это так, вам следует отправить отчет об ошибке с помощью Xerces. Вполне возможно, что Xerces не был предназначен для обработки файлов такого размера.

...