Maximale Länge eines Strings

Fohnbit

Top Contributor
Hallo,

ich habe eine Busmonitor ähnliche Klasse geschrieben.
Es sammelt String Zeilen ... Länge per Zeile ca. 100 Zeichen.
Diese werden 1h lang gesammelt und dann als CSV auf einen FTP hochgeladen.

Meine Frage:
Ist es effizient mittels:
Java:
event += simpleDateFormat.format(timestamp) + "\t" + boxNode.getName() + "\t[" + boxNode.getId() + "]\t"
                + value;
immer zu verketten?

Es kann bis 100.000 Zeilen enthalten.
Oder würdet Ihr alles in eine Arraylist packen und dann mittels Loop zu einem ganzen String verketten?

Oder wäre Stringbuilder besser?

Danke!
 
Ich würde auch den StringBuilder verwenden. Da beim Anhängen immer ein neues String-Objekt erzeugt wird, kann das ganze recht langsam werden, dies wird beim StringBuilder vermieden.
 
Nun hat sich noch eine Frage ergeben.
Habe ich die Variable "events" (Stringbuilder) richtig neu instanziert?
Und Eclipse zwingt die Variable "backupEvent" als final zu deklarieren, da ich beim Uploaden des Files nicht den Code blockieren möchte. Ist das soweit korrekt? (Natürlich funktioniert es, aber irgendwie scheint er ständig mehr Speicher zu nutzen. Als bliebe etwas bestehen.

Danke

Java:
private void uploadToFTP() {
        final String backupEvent = events.toString();
        events = new StringBuilder();
        counter = 0;

        Thread thread = new Thread() {
            public void run() {
                FTPClient client = new FTPClient();
                InputStream input = null;

                Date date = new Date();
                SimpleDateFormat format = new SimpleDateFormat("ddMMyyy-HHmmss");

                try {
                    client.connect(getPropertyIp(), getPropertyPort());
                    client.login(getPropertyUsr(), getPropertyPwd());

                    client.enterLocalPassiveMode();
                    String reply = client.getReplyString();
                    input = new ByteArrayInputStream(backupEvent.getBytes());

                    client.storeFile(getPropertyPath() + "/" + format.format(date) + ".csv", input);
                    reply = client.getReplyString();

                    if (!reply.startsWith("226")) {
                         .... FEHLER ...
                    } else {
                        counter = 0;
                       .... KEIN FEHLER ....
                    }

                    client.logout();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (input != null) {
                            input.close();
                        }
                        client.disconnect();

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        thread.start();
    }
 
Prinzipiell funktioniert' so schon.Du kannst auch einfach den INHALT des Stringbuilders mit setLength(0) löschen, das ist etwas eleganter, dann gehen nicht synchronisierte Zugriffe von außerhalb nicht in die falsche Variable.
Noch besser wäre, nicht direkt auf die Variable zuzugreifen (beschreiben wird sie ja woanders), sondern die Zugriffe über synchronisierte Methoden zu erledigen.
 

Zurück
Oben