Hallo Liebe Leute,
ich bitte euch hier um Hilfe bzw bitte um einen Vorschlag ich habe ein .bz2 File 11 GB groß ich lese das File ohne zu extrahieren mit
Apache commons-compress-1.23.0 es lief alles gut bis ich bestimmte Zeilen vom bz2 File auf Threads verteilen möchte damit ich mit
Multi-Threading der Inhlat des Files in die DB importiere wie ich recherchiert habe (s.Code) man bekommt zum Schluß ein Object vom Type
BufferedReader dort kann man die Methoden ReadLine(); liest man vom File eine Zeile dann bestimmt man die Länge der Zeile (der gelesene String)
summiert man die Länge von z.B 10 Zeilen dann die Summe als Position (Parameter) der Methoden mark(position); liefert dann mit reset(); soll die
Stelle bestimmt werden, wo der Thread anfängt das File zu lesen.
Das Problem:
des Lesen vom .bz2 File läuft ohne Problem aber die Methoden mark(position); und reset() setzen die Position im .bz2 File nicht also wird immer
die erste Ziele gelsen obwohl ich die mark(position); dann reset(); Methoden aufrufe ?
Hat jemand einen Vorschlag gibt es auch andere Metode in Java, mit der kann man das File lesen (ohne zu extrahieren und dann die Stellen im File auf Threads verteilen damit der Inhalt in die DB importiert wird ?
Danke euch 🌹
Apache commons-compress-1.23.0: https://commons.apache.org/proper/commons-compress/download_compress.cgi
Das .zb2 File unter https://enamine.net/compound-collections/real-compounds/real-database (REAL database, HAC 6-21 420M compounds, CXSMILES )
ich bitte euch hier um Hilfe bzw bitte um einen Vorschlag ich habe ein .bz2 File 11 GB groß ich lese das File ohne zu extrahieren mit
Apache commons-compress-1.23.0 es lief alles gut bis ich bestimmte Zeilen vom bz2 File auf Threads verteilen möchte damit ich mit
Multi-Threading der Inhlat des Files in die DB importiere wie ich recherchiert habe (s.Code) man bekommt zum Schluß ein Object vom Type
BufferedReader dort kann man die Methoden ReadLine(); liest man vom File eine Zeile dann bestimmt man die Länge der Zeile (der gelesene String)
summiert man die Länge von z.B 10 Zeilen dann die Summe als Position (Parameter) der Methoden mark(position); liefert dann mit reset(); soll die
Stelle bestimmt werden, wo der Thread anfängt das File zu lesen.
Das Problem:
des Lesen vom .bz2 File läuft ohne Problem aber die Methoden mark(position); und reset() setzen die Position im .bz2 File nicht also wird immer
die erste Ziele gelsen obwohl ich die mark(position); dann reset(); Methoden aufrufe ?
Hat jemand einen Vorschlag gibt es auch andere Metode in Java, mit der kann man das File lesen (ohne zu extrahieren und dann die Stellen im File auf Threads verteilen damit der Inhalt in die DB importiert wird ?
Danke euch 🌹
Apache commons-compress-1.23.0: https://commons.apache.org/proper/commons-compress/download_compress.cgi
Das .zb2 File unter https://enamine.net/compound-collections/real-compounds/real-database (REAL database, HAC 6-21 420M compounds, CXSMILES )
Code:
public static BufferedReader getBufferedReaderForCompressedFile(String filePathWithName) throws FileNotFoundException, CompressorException {
FileInputStream fin = new FileInputStream(filePathWithName);
BufferedInputStream bis = new BufferedInputStream(fin);
CompressorInputStream input = new CompressorStreamFactory().createCompressorInputStream(bis);
BufferedReader br = new BufferedReader(new InputStreamReader(input));
String line = "Empty";
int counter = 0;
try {
while ((line = br.readLine()) != null && counter < 10) {
counter ++;
line = br.readLine();
System.out.println(counter+" "+line+" row.length "+line.length());
}
} catch (IOException e) {
e.printStackTrace();
}
return br;
}