Charset CharToByteRate

Nightmares

Aktives Mitglied
Hallo,

ich entwickel momentan meine JAVA NIO Plattform weiter. Diese ist auch voll funktionsfähig und kann im Punkto Performence mit anderen mithalten / diese sogar teilweise übertrumpfen. Allerdings stehe ich vor einem kleinen Problem bei der Implementierung eines weiteren, neuen, einfach zu benutzten Protokolls: Um ein beliebiges Charset vom Benutzer wählen lassen zu können muss ich irgentwie die !höchste Rate von Char zu Byte bestimmen können. Sicher ich könnte einfach solange die BufferOverflowException abfangen und den ByteBuffer um 10% vergrößern, bis er groß genug ist um den nächsten Schwung zu fassen. Allerdings ist das ja nicht optimal da es auch um Performence geht. UTF8 zum Beispiel hat eine andere CharToByte Rate als ISO-xxx-xx zum Beispiel. Bei UTF8 ist es zum Beispiel bis zu 4 Byte. Bei einem ISO-xxx-xx ist es nur 1 Byte. Meine Idee war einfach die Länge des Strings mal CharToByteRate und ab damit... Allerdings bin ich nach längeren suchen und lesen der APInoch nicht fündig geworden. Und einfach Overkill mit 8 Byte was glaube ich atm das größte ist find ich auch nicht so toll. Ram-Probleme enstehen dabei nicht, weil der Buffer der die Daten später zwischenspeichert sowieso nur Daten enthält und auf diese Länge gekürzt wird.
Das Problem ist also heraus zu finden, wieviel Bytes das jeweilige Charset pro Char maximal braucht...
 

Nightmares

Aktives Mitglied
Nach weiterem Suchen und Fragen habe ich bisher immer noch nichts gefunden. Deshalb der mega Hammer: 8 Byte für jeden Char... ist vielleicht nicht ganz 100% das Effektivste aber immer noch schnell / weniger Ram intensiv als alles andere (incl. Versuche heraus zu finden wie viele Bytes pro Char in einem Charset maximal verwendet werden, weil man sich da auch je nach System nicht drauf verlassen kann, leider... da gibt es wohl eine Bugs und Plattform spezifischen Abweichungen...)
 

Nightmares

Aktives Mitglied
Hallo nochmal,

durch Zufall habe ich jetzt doch noch eine Lösung für das Problem gefunden:
Der CharsetEncoder selber hat eine Methode names .maxBytesPerChar() welche genau die Antwort auf meine Frage gibt und damit die Speichernutzung noch etwas verringert und die Effizienz steigert und außerdem für jedes Charset passend den Wert bestimmen kann.
Java:
CharsetEncoder cenc = charset.newEncoder();
int mbpc = cenc.maxBytesPerChar();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X HTTP Seltsames Charset Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben