Socket SFTP mit JSCH - Speedproblem

Micha2903

Mitglied
Hallo alle miteinander.

Ich versuche mich gerade mit meiner ersten SFTP Verbindung zu einem Linux Root. Von diesem Versuch ich eine Logfile zu laden, per Stream in einen String zu schreiben und diesen dann weiter zu verarbeiten.

Zum meiner Überaschung, gelang das auch fast auf Anhieb.:lol:

Prinzipiell funktioniert alles einwandfrei. Ein Problem hab ich allerdings mit der Geschwindigkeit der ganzen Geschichte. Mein Logfile war gerade mal 500Byte groß und dennoch dauert es gut 5 Sekunden, bis ich den fertigen String zur Verarbeitung bereit habe. Davon vielleicht eine Sekunde für Authentifizierung. Geschätzt komme ich auf etwa 20 Bytes die Sekunde, was mir doch sehr arg wenig vor kommt.

Kann sowas alleine durch einen fehler im Code hervorgerufen werden? Ich mein klar ist die jeweilige INet Leitung da auch maßgebend, aber 20b/s ist doch hart, gerade wenns dann mal ein bissel größere Dateien werden.

Ich hoffe mir kann da jemand einen Tipp geben.

Java:
JSch jsch = new JSch();
        try {
            Session sftpSession = jsch.getSession(user, ip, port);
            Hashtable config = new Hashtable();
            config.put("StrictHostKeyChecking", "no");
            sftpSession.setConfig(config);
            sftpSession.setPassword(pw);

            sftpSession.connect();

            ChannelSftp sftpChannel = (ChannelSftp) sftpSession.openChannel("sftp");
            sftpChannel.connect();

            if (sftpChannel.isConnected()) {
                try {
                    sftpChannel.cd(path/to/dir);
                    fileStream = sftpChannel.get(file_name);

                    byte zeichen;
                    do {
                        zeichen = (byte) fileStream.read();
                        text += (char) zeichen;
                    } while (zeichen != -1);
 

Micha2903

Mitglied
Tatsächlich. Ich hätte gedacht, man müsse das wenigstens ein wenig an der CPU absehen können.

Hab es nun mal über die Schiene versucht:

Java:
Reader reader = new BufferedReader(
                            new InputStreamReader(fileStream, "UTF-8"));

Und siehe da, ich komme schon fast an 1MegaByte die Sekunde. Hier und da noch ein bissel dran rum gespielt und das Ergebnis ist zufriedenstellend. Ich danke für dein kleinen Anstoß.
 
G

Gelöschtes Mitglied 5909

Gast
liegt wohl daran, dass für read() ein TCP Packet verschickt wird.
 

Ähnliche Java Themen


Oben