Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo liebes Forum,
ich hätte gerne gewusst, wie groß die Kapazität von JavaFX Textfields ist.
Also wie viele MB.
Was kann man zu der Ladezeit sagen, bei langen Texten?
Danke für Antworten.
Die Methode setText erwartet einen String als Parameter. Diese können theoretisch eine Zeichenkette mit einer Länge von 2.147.483.647 Zeichen enthalten. Ein Zeichen/char erfordert 2 Bytes Speicherplatz also rund 4,3 GB.
Falls deine Anwendung über genügend Speicher verfügt, hängt die Ladezeit maßgeblich von der Geschwindigkeit deines Systems ab, also CPU, Speicher, evtl. Dateisystem, usw. Auf jeden Fall macht es keinen Sinn so eine große Datenmenge in ein normales Textfeld zu laden. Selbst bei einem Textarea würde man das nicht tun und die Daten in Chunks aufteilen und diese dynamisch nachladen.
Ich bin mir hier keine wirklichen Grenze bewusst. Die Grenze könnte somit Integer.MAX_VALUE Zeichen sein (Das wäre dann die Grenze die spätestens von String gesetzt würde). (Ist evtl. auch nicht ganz exakt. Man müsste sich die Implementierung jeweils komplett im Detail ansehen, um zu schauen, was alles an Operationen gemacht wird.
Das ist aber auch alles weniger interessant, denn da kommen immer noch Fragen wie:
Bedienbarkeit - Ein Textfield mit 2.000.000.000 Zeichen ist für einen Benutzer nicht wirklich handhabbar...
Geschwindigkeit - Du willst ja in dem Textfield etwas machen... Dabei muss es ja immer wieder neu gemalt werden und so.
Und die eigentliche Problematik wird dann wohl auch der belegte Speicher sein. Ein so großer String muss im Speicher gehalten werden. Und das ggf. mehrfach, weil Du damit dann irgend was machst oder so ...
Da würde ich einfach einmal schauen und es etwas ausprobieren. Und wenn es hier wirklich ein Usecase gibt, bei dem sowas gebraucht wird, dann würde ich da die Anforderungen genauer überlegen um dann ggf. entsprechende Klassen zu haben um die Daten vorzuhalten. Da kommen dann so Ideen auf wie z.B. Paging und so.
Das ist nicht mehr ganz richtig. Irgendwo um 12(?) herum wurde eine Optimierung eingebaut dass `String`s welche nur ASCII-Zeichen enthalten auch nur ein "einfaches" byte-Array enthalten, also tatsaechlich 1 Byte pro Zeichen. Ist aber ein Implementierungsdetail der JVM, soweit ich weisz.
Diese können theoretisch eine Zeichenkette mit einer Länge von 2.147.483.647 Zeichen enthalten. Ein Zeichen/char erfordert 2 Bytes Speicherplatz also rund 4,3 GB.
Ist das nicht verkehrt herum? Ein String hat intern ein byte[] welches maximal 2 Milliarden Eintraege haben kann, Also 2GB per String, bei 2 Byte je Zeichen sind das dann 1 Milliarde Zeichen, bei 2GB.
Es waere interessant zu wissen was genau du vorhast, weil es gibt vermutlich einen besseren Weg als ein TextField. Falls du vorhast Quellcode und aehnliches anzuzeigen, dies dann zu formattieren, wird sehr, sehr, sehr wahrscheinlich deine Formatierungslogik dann der Flaschenhals sein und nicht das reine laden oder anzeigen. Wobei ich jetzt bei JavaFX auch nicht unbedingt meine Hand ins Feuer legen wuerde dafuer dass sich das Steuerelement mit groszen Strings gut verhaelt.
Was hast du denn vor, vermutlich koennen wir die konkrete Aufgabe viel besser beantworten als eine solche abstrakte Frage.