Sto cercando di elaborare file XML troppo grandi per adattarli alla memoria. Hanno dimensioni che vanno da decine di megabyte a oltre 120 GB. Il mio primo tentativo mi ha fatto leggere i file come testo semplice, in blocchi di poche migliaia di caratteri alla volta, e cercare singoli tag XML completati nei pochi pezzi di String
:
FileReader fileReader;
try {
fileReader = new FileReader(file);
DocumentBuilder factory = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc;
int charsToReadAtOnce = 1000;
char[] readingArray = new char[charsToReadAtOnce ];
int readOffset = 0;
StringBuilder buffer = new StringBuilder(charsToReadAtOnce * 3);
while(fileReader.read(readingArray, readOffset, charsToReadAtOnce ) != -1) {
buffer.append(new String(readingArray));
String current = buffer.toString();
doc = factory.parse(new InputSource(new StringReader(buffer.toString())));
//see if string contains a complete XML tag
//if so, save useful info and manually clear it
}
} catch (ALL THE EXCEPTIONS...
Questo si stava rivelando complicato e veloce con un sacco di casi limite come tag con oltre 1000 caratteri e ignorando i tag di inizio e fine. Invece di andare avanti, voglio usare un algoritmo meno doloroso ma non riesco a crearne uno veramente valido. Java ha un modo più appropriato per gestire enormi file XML come questi? Mentre faccio questa domanda, mi sono imbattuto in Leggi un xml compresso con .NET . Penso che qualcosa del genere, ma ovviamente per Java potrebbe funzionare per me, ma non so se esiste?