Ho un PC con 4 GB di RAM e un file con 10 GB di memoria. Ora voglio verificare, se ogni riga del file è unica così ho scritto il seguente codice:Come estrarre righe univoche nel file> 10 GB con 4 GB di RAM
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Cleaner {
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("Too less parameters!");
return;
}
File file = new File(args[0]);
BufferedReader buff = new BufferedReader(new FileReader(file));
String line;
Set<String> set = new HashSet<String>();
while ((line = buff.readLine()) != null) {
set.add(line);
}
FileWriter fw = new FileWriter(args[1]);
for (String s : set) {
fw.write(s + "\n");
fw.flush();
}
fw.close();
buff.close();
}
}
Ma ho un OutOfMemoryException quindi la mia domanda è:
Come dovrei cambiare il mio codice per ottenere un file in cui ogni riga è unica?
Grazie per il vostro aiuto in anticipo.
Dividere in blocchi e confrontare paiawaise. Oppure cancella ogni riga e archivia l'hash insieme alla linea. – user
Il problema con l'hashing è che ogni riga è solo un hash e come posso chunk mi mancherà forse alcune linee duplicate. –
Dai un'occhiata a RandomAccessFile puoi leggere la riga 1 da RandomAccessFile 'a' e confrontarla con tutte le altre linee di RandomAccessFile 'b'. Dopo di ciò leggere la riga 2 e così via – user