Attualmente mi occupo di un'app con diverse classi che vengono utilizzate per confrontare i file in vari formati (xls, csv, xml, html, pdf ...). Stanno tutti implementando un'interfaccia definita in questo modo:
public interface ReportComparator {
// compare files (1 - match, 0 - no match, -1 - both files empty)
int compareTwoFiles(InputStream fileA, InputStream fileB) throws IOException;
// gets a list of format-specific differences between two files
List<String> getDifferences(InputStream fileA, InputStream fileB) throws IOException;
}
I comparatori specifici vengono istanziati attraverso una classe Report
e successivamente utilizzati da un'applicazione GUI, che stampa i risultati del confronto.
Relazione:
public class Report {
private final String name, format;
private final ReportComparator comparator;
public Report(String name, String format) {
// produce comparator specific for the format
}
ReportComparator getComparator() {
return this.comparator;
}
}
Il problema è che quando mi occupo di file di grandi dimensioni esaurisco rapidamente la memoria quando chiamo getDifferences()
(l'aumento della memoria non è attualmente un'opzione). Pertanto, ho pensato di utilizzare qualcosa come un python generator
, ma ho problemi a visualizzarlo in java. Dal momento che lambdas
consente l'esecuzione differita, sarebbe un candidato per questo, ma sarebbe possibile mantenere questa API o almeno non dover refactoring un sacco di codice (praticamente di nuovo da zero)?