Byte array oder String

Status
Nicht offen für weitere Antworten.

mwildam

Mitglied
Beim Java-Lernen stosse ich immer wieder auf Byte Arrays, die anscheinend oft Strings (meine damit nicht bloss String-Objekte, sondern auch StringBuilder und andere Klassen, die String-basiert arbeiten) vorgezogen werden.

Unter welchen Umständen sollte ich eher Byte Arrays verwenden? - Ich habe einiges zur Performance-Optimierung gelesen, aber Vergleiche von Byte-Arrays mit Strings waren da nie erwähnt.

Arbeiten alle String-basierten Klassen im Hintergrund mit Char-Arrays?

In den meisten meiner Anwendungsfälle werde ich jedenfalls nicht mit fixen String-Längen (also auch nicht mit fixen Array-Größen) arbeiten (können). Sind unter diesen Umständen Strings zu bevorzugen?
 

Pappenheimer++

Bekanntes Mitglied
Das Problem bei Strings ist, dass aufgrund ihrer UTF-8 Codierung jeder Character variable Länge hat (1-4 Byte). Sprich ein Buchstabe/Zeichen hat nicht immer die gleiche Länge. U.a. deshalb kann man Strings auch nicht ändern, dafür sind ja die Klassen StringBuffer/Builder.

Zu deiner Frage: Willst du wissen, ob du anstatt Strings zu benutzen, lieber Char-Arrays nehmen sollst oder gar Byte-Arrays und dir eine String-Klasse selber schreiben? Davon ist abzuraten. Die Klasse StringBuilder wirst du kaum selber besser implementieren können. Und was sollen Char Arrays bringen? Sie nehmen mehr Speicher weg und die Compiler-Optimierung, die es für den klassischen String gibt, gibt es für dein Char-Array nicht. Folgendes Szenario:
1. Du erstellt ein Char Array, hast es nicht vor, zu verändern.
2. Du machst das gleiche mit dem selben Inhalt.
Jetzt hast du das gleiche zweimal im Speicher. Bei einem String (der ja konstant ist), optimiert der Compiler das ganze so, dass die Bits nur einmal im Speicher liegen.
 

ARadauer

Top Contributor
String arbeitet im Hintergrund mit einem char Array

Code:
 /** The value is used for character storage. */
    private final char value[];

/** The offset is the first index of the storage that is used. */
    private final int offset;

    /** The count is the number of characters in the String. */
    private final int count;

in wie weit man jetzt bei der täglichen Arbeit Strings noch optimieren soll, (ausser natürlich die verkettung in schleifen....) kann nicht nicht sagen.

Wir bewegen uns hier im milisekunden Bereich, also ich verwende niemals ein byte array statt eines strings...
 

Niki

Top Contributor
Jein...

Der Compiler hat mit der Speicherverwaltung von Strings nichts zu tun. Es ist auch abhängig von der Implementierung der VM. Es kann sein dass String-Konstanten speicher-optimiert verwendet werden, es muss aber nicht sein.
Die Speicheroptimierung wird auch nur dann verwendet, wenn man String-literale verwendet.

Probiers aus:

Code:
String s = "abc";
String s2 = "abc";
String s3 = new String("abc");

System.out.println(s == s2);
System.out.println(s == s3);
 

mwildam

Mitglied
Pappenheimer++ hat gesagt.:
Zu deiner Frage: Willst du wissen, ob du anstatt Strings zu benutzen, lieber Char-Arrays nehmen sollst oder gar Byte-Arrays und dir eine String-Klasse selber schreiben?
Ja, die Frage ist, ob (bzw. in welchen Fällen) ich lieber Char- oder Byte-Arrays benutzen sollte statt Strings und nein, ich will mir die String-Klasse gewiss nicht selber schreiben.

Mir ist nur nicht ganz klar, wann was besser ist, ganz besonders unklar ist es mir zB bei StringBuilder und Byte-Array - wo liegt da der Vorteil bei Byte-Arrays. Am ehesten denke ich mir, kann es nur dann einen Vorteil beim Byte-Array geben, wenn ich genau weiss, wieviele Elemente ich in meinem Array haben werde. Für alle Anwendungen, wo variable Längen von Datenströmen auftreten, sehe ich keinen Vorteil von Byte-Arrays.


Pappenheimer++ hat gesagt.:
Das Problem bei Strings ist, dass aufgrund ihrer UTF-8 Codierung jeder Character variable Länge hat (1-4 Byte). Sprich ein Buchstabe/Zeichen hat nicht immer die gleiche Länge. U.a. deshalb kann man Strings auch nicht ändern, dafür sind ja die Klassen StringBuffer/Builder.
Das ist ja eigentlich auch ein Nachteil von den Byte-Arrays - da müsste ich mich selber um die Codierung kümmern. Byte Arrays nützen mir dann nur was, wenn ich wirklich definitiv byteweise zugreifen will - vielleicht ist das auch DIE Anwendung für Byte-Arrays.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J String array to byte array Java Basics - Anfänger-Themen 8
H String in Byte Array wandeln Java Basics - Anfänger-Themen 25
D Byte-Array zu Hex-String umwandeln Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G SHA (byte array) per modulo hashen Java Basics - Anfänger-Themen 6
K Byte-Array als Zeichenfolge ausgeben Java Basics - Anfänger-Themen 3
G byte array in integer konvertieren Java Basics - Anfänger-Themen 15
P InputStream in Byte-Array speichern Java Basics - Anfänger-Themen 2
U byte array in datei 'dumpen' / speichern Java Basics - Anfänger-Themen 2
G Byte Array inkrementieren Java Basics - Anfänger-Themen 17
H von und in byte array wandeln Java Basics - Anfänger-Themen 8
G Konvertierung Byte Array Java Basics - Anfänger-Themen 4
tobiasbeil Von Datei byte für byte lesen und in ein Array einfügen. Java Basics - Anfänger-Themen 11
G Byte-Array Infos speichern Java Basics - Anfänger-Themen 14
F char to byte array Java Basics - Anfänger-Themen 8
S byte-array bitweise auslesen Java Basics - Anfänger-Themen 14
G Char oder Byte Array mit unbekannter länge erstellen? Java Basics - Anfänger-Themen 1
T XML Parsen und Inhalt in ein Byte Array schreiben Java Basics - Anfänger-Themen 3
C Byte-Array mit Dateiinhalt füllen Java Basics - Anfänger-Themen 7
G 4-stelliges-Byte-Array in Integer umwandeln geht das? Java Basics - Anfänger-Themen 10
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
P int zu byte Java Basics - Anfänger-Themen 8
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
V unsigned byte? Java Basics - Anfänger-Themen 27
U short[] nach byte[] Java Basics - Anfänger-Themen 11
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben