Hallo, ich bin gerade wieder an Java dran und stehe damit auch wieder vor einigen Problemen... - Ich hoffe ihr könnt mir helfen.
Ich lade einen Datei von einem FTP-Server (direkt als Sream, um eine temporäre Datei zu vermeiden):
Zur weiteren Verarbeitung beöntige ich den Datei-Inhalt als String, hierfür gibt es anscheinend nur die read()-Methoden. Wenn ich mir jedes Zeichen einzeln aus dem Stream hole, um dieses an einen String anzuhängen, dann benötigt die Ausführung allerdings unverhältnismäßig viel Zeit (sehr viel länger, als den Stream in eine Datei zu schreiben!). Ich verwende dabei folgenden Quelltext:
PS: Ich könnte zwar einen StringBuffer verwenden, aber hier im Forum wurde mir einmal gesagt, dass der Kompilierer bei "String +=" intern sowies eine StringBuffer-Operation anwendet. - Ist dem doch nicht so?
Die überladenen Methoden read(byte[] b) und read(byte[] b, int off, int len) kann ich leider nicht anwenden (zumindest weiß ich nicht wie...), weil ich die Länge der Datei nicht kenne. Ich habe in der FTPClient-Klasse auch keine Methode gefunden, welche mir diese Information liefert. - Oder ist dies evtl. über BufferSize() realisierbar? Bei php gäbe es dafür ja die Funktion ftp_size($id, $filename).
Hat evtl. jemand einen Tipp für mich?
Ich lade einen Datei von einem FTP-Server (direkt als Sream, um eine temporäre Datei zu vermeiden):
Java:
InputStream inStream = ftp.retrieveFileStream(ftpLogin.ftp_datafile);
Zur weiteren Verarbeitung beöntige ich den Datei-Inhalt als String, hierfür gibt es anscheinend nur die read()-Methoden. Wenn ich mir jedes Zeichen einzeln aus dem Stream hole, um dieses an einen String anzuhängen, dann benötigt die Ausführung allerdings unverhältnismäßig viel Zeit (sehr viel länger, als den Stream in eine Datei zu schreiben!). Ich verwende dabei folgenden Quelltext:
Java:
if(inStream != null) {
int c;
while( (c = inStream.read()) != -1 ){
System.out.println((char)c); // nur fürs Debugging - es dauert aber auch ohne Konsolenausgabe extrem lang
fileAsString += Character.valueOf((char)c);
}
inStream.close();
}
PS: Ich könnte zwar einen StringBuffer verwenden, aber hier im Forum wurde mir einmal gesagt, dass der Kompilierer bei "String +=" intern sowies eine StringBuffer-Operation anwendet. - Ist dem doch nicht so?
Die überladenen Methoden read(byte[] b) und read(byte[] b, int off, int len) kann ich leider nicht anwenden (zumindest weiß ich nicht wie...), weil ich die Länge der Datei nicht kenne. Ich habe in der FTPClient-Klasse auch keine Methode gefunden, welche mir diese Information liefert. - Oder ist dies evtl. über BufferSize() realisierbar? Bei php gäbe es dafür ja die Funktion ftp_size($id, $filename).
Hat evtl. jemand einen Tipp für mich?