Java - Schnellste Möglichkeit, um die Größe von String zu überprüfen

7

Ich habe den folgenden Code innerhalb einer Schleifenanweisung.
In der Schleife werden Strings an sb (StringBuilder) angehängt und geprüft, ob die Größe von sb 5 MB erreicht hat.

%Vor%

Dies funktioniert gut, aber es ist sehr langsam (in Bezug auf die Überprüfung der Größe)
Was wäre der schnellste Weg, dies zu tun?

    
d-_-b 24.04.2017, 11:12
quelle

3 Antworten

8

Sie können die UTF-8 -Länge schnell mit

berechnen %Vor%

Wenn ASCII-Zeichen den Inhalt dominieren, könnte es etwas schneller sein,

zu verwenden %Vor%

stattdessen.

Aber Sie können auch das Optimierungspotenzial in Betracht ziehen, indem Sie nicht die gesamte Größe neu berechnen, sondern nur die Größe des neuen Fragments, das Sie an die StringBuilder anhängen, etwas ähnliches

%Vor%

Dies setzt voraus, dass wenn Sie Fragmente mit Ersatzpaaren anhängen, diese immer vollständig sind und nicht in ihre Hälften aufgeteilt werden. Für normale Anwendungen sollte dies immer der Fall sein.

Eine weitere Möglichkeit, vorgeschlagen von Didier-L , ist, die Berechnung zu verschieben, bis Ihr StringBuilder erreicht ist eine Länge der Schwelle geteilt durch drei, wie zuvor, ist es unmöglich, eine UTF-8 -Länge größer als die Schwelle zu haben. Dies ist jedoch nur dann von Vorteil, wenn Sie in einigen Ausführungen threshold / 3 nicht erreichen.

    
Holger 24.04.2017, 13:01
quelle
8

Wenn Sie eine 1000-fache Schleife ausführen, werden Sie 1000String generieren und dann in das Array "UTF-8 Byte" konvertieren, um die Länge zu erhalten.

Ich würde die Konvertierung durch Speichern der ersten Länge reduzieren. Erhalten Sie dann in jeder Schleife nur die Länge des hinzugefügten Werts, dann ist dies nur eine Addition.

%Vor%

Dies würde den belegten Speicher und die Konvertierungskosten verringern

    
AxelH 24.04.2017 11:17
quelle
2

Erwägen Sie die Verwendung eines ByteArrayOutputStream und eines OutputStreamWriter anstelle von StringBuilder. Verwenden Sie ByteArrayOutputStream.size (), um die Größe zu testen.

    
Maurice Perry 24.04.2017 13:38
quelle

Tags und Links