Leitura de XML grande - mais de 200Mb

Bom dia pessoal !

Qual API vocês usam quando precisam ler um XML bem grande no java ?

Eu costumo utilizar o JAXB para trabalhar com XML, mas neste caso está estourando a memória quando faço o Unmarshaller.

JAXBContext jaxbContext = JAXBContext.newInstance("br.com.schema.v1_01");
Unmarshaller u = jaxbContext.createUnmarshaller();
File xmlFile = new File(caminhoXml);

Vou ter que abordar de outra forma, qual API é mais indicada neste caso?

Obrigado :slight_smile:

Ja tentou usar o http://woodstox.codehaus.org/ ??

Da uma olhada tambem em http://jcp.org/en/jsr/detail?id=173

//Daniel

Não conhecia esse WoodStox … vc já usou ele?

Sabe se ele coloca tudo na memória para fazer o parse do arquivo? É isso que eu estou tentando evitar.

valeu

[quote=orogerio]Não conhecia esse WoodStox … vc já usou ele?

Sabe se ele coloca tudo na memória para fazer o parse do arquivo? É isso que eu estou tentando evitar.

valeu[/quote]
Nunca usei. Mas li alguns artigos sobre ele, parece ser muito bom e tem a vantagem de ser open source.

Eu nao acredito que carrega tudo na memoria (seria pouco eficiente), eu estava lendo a documentacao e vc pode fazer algo do tipo:

try{
	XMLStreamReader2 xmlr =
		(XMLStreamReader2)
		xmlif.createXMLStreamReader(
		filename, new
		FileInputStream(filename));
                ....

E ai percorrer o arquivo usando o metodo .next()

while(xmlr.hasNext()){
	eventType = xmlr.next();
        ...

Aqui tem um tutorial legal:
http://www.developerfusion.com/article/84523/stax-the-odds-with-woodstox/

Pesquisa na pagina por “Parsing with StAX 2”, eh o ultimop topico da pagina.

//Daniel

show Daniel … valeu pelo help.

Oi, bom dia!

Use um mecanismo SAX, deve resolver:
http://www.guj.com.br/articles/15

Recomendo o JColtrane:

http://jcoltrane.sourceforge.net/userguide_pt/conhecimeto_previo_necessario.html

Abraço,

[quote=rodrigo.ferreira]Oi, bom dia!

Use um mecanismo SAX, deve resolver:
http://www.guj.com.br/articles/15

Recomendo o JColtrane:

http://jcoltrane.sourceforge.net/userguide_pt/conhecimeto_previo_necessario.html

Abraço,[/quote]

Mecanismo SAX eh de alguma forma inferior ao StAX, com StAX vc tem muito mais controle sobre a leitura e parsing do XML, alem disso eh possivel leitura e escrita de XML, ja com SAX isso nao eh possivel, aqui tem um texto interessante comparando os dois:

//Daniel

Recomendo a Javolution, que é uma API de alto desempenho para java, como pode ser observado no link abaixo, a otimização chega a níveis impressionante.

http://infoblogs.com.br/view.action?contentId=42111&Alternativas-sao-uma-coisa-boa--Performance-em-leitura-XML.html