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: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)
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.
[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