Navigation

Eigene Programme

Codeschnipsel

Libraries

english

AsciiString

Die Normale Java-String-Klasse, java.lang.String, hat einen Vorteil gegenüber der von anderen Programmiersprachen wie C++: Statt ASCII ist sie UTF-16. Das heisst, die kann nicht nur die normalen 127 ASCII-Zeichen (Mit ext. ASCII 255) sondern sozusagen alle Zeichen von allen Sprachen speichern.
Wie gesagt, das ist ein Vorteil... normalerweise. Was aber, wenn man z.B. eine Grosse Textdatei, sagen wir mal 40 MB, einlesen muss, von der man weiss, dass sie nur ASCII enthält? Der normale String kann das zwar schon, nur werden dann pro Byte Text 2 Bytes RAM (+overhead) belegt, bei unserer Textdatei also 80+ MB. Das ist eine Enorme verschwendung, da doppelt so viel Platz belegt wird, als nötig ist. Nun, ich Stand letztens vor genau diesem Problem, mein Programm schmiss mir ein wunderhübsches "Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space" an's Gesicht. Mit der jconsole (seit Java 5 dabei) schaute ich mir dann mal den Heap an (TaskManager bringt bei Javaprogrammen ja nix) und setzte den Maximalspeicher der VM auf 400 MB und siehe da, mein Proggi füllte pralle 300 Mega! Nun ja, nachdem ich ein paar Designunschönheiten entfernte, waren es noch 160.
Jedenfalls war es viel zu viel. Aus diesem grund habe ich mir dann diese AsciiString-Klasse geschrieben, die ziemlich alles kann, was der normale String kann (Kunststück, ich hab die Funktionen vom Original als Vorlage genommen) aber für ASCII ausgerichtet ist. Soll heissen, innerhalb steht nicht ein char-Array (char = 2 bytes), sondern ein byte-Array (byte = 1 byte, duh).

Soo.. Die .java-Datei gibt's hier: AsciiString.java, die JavaDoc hier: AsciiString JavaDoc

Benutzung auf eigene Gefahr. Ich habe es nicht grossartig getestet: Bei meinem Proggi funktionierte alles, das reichte mir.