# Die Größe eines Strings in Byte berechnen?



## data89 (23. Sep 2008)

Hallo, da meine Frage in einem anderen Beitrag nicht beachtet wurde, setze ich Sie einfach mal hier rein!   

Wie berechne ich die größe eines Strings in byte? 

Also ich gebe den String "Hallo" rein und bekomme raus "21" Byte. Ich habe gelesen, dass die Zeichen Addiert werden (ord/chr) + "FOF" .. ? 

Unter Google hat man nichts "wirkliches" gefunden!!

data89


----------



## Ariol (23. Sep 2008)

```
System.out.println("Hallo".toCharArray().length * 16);
```

Java codiert chars mit 16byte


----------



## musiKk (23. Sep 2008)

Bits, nicht Byte. Also zwei Byte pro char. Mehr dazu auch bei JavaWorld.


----------



## Wildcard (23. Sep 2008)

So simpel sind Strings nicht aufgebaut. Die Rechnung geht daneben. Da Unicode Zeichen zum Teil mit mehr als 2 byte kodiert werden müssen, gibt es sogenannte surrogate pairs, also  Kombinationen aus mehreren chars. Die Character Klasse sollte dafür einige Methoden anbieten,


----------



## Gelöschtes Mitglied 5909 (23. Sep 2008)

desweiteren würde ich mal behaupten dass ein String Objekt noch mehr speicher frisst als ein einfaches char array, auch wenn das natürlich darin gekapseöt ist. Die größe des tatsächlichen String Objekts herauszufinden ist etwas schwieriger, spontan würde ich das ganze Serialisieren und dann schaun wie groß der Spaß ist.


----------



## Leroy42 (24. Sep 2008)

raiL hat gesagt.:
			
		

> desweiteren würde ich mal behaupten dass ein String Objekt noch mehr speicher frisst als ein einfaches char array



Wieso das denn?  :shock: 

Auch ein char kann manchmal aus mehreren Bytes bestehen!


----------



## Ariol (24. Sep 2008)

musiKk hat gesagt.:
			
		

> Bits, nicht Byte. Also zwei Byte pro char. Mehr dazu auch bei JavaWorld.




Aehm, ja...


----------



## data89 (24. Sep 2008)

Und wie bestimme ich nun die Größe???  :bahnhof:


----------



## Wildcard (24. Sep 2008)

http://itblog.eckenfels.net/archives/17-Java-und-Unicode.html


----------



## Ark (24. Sep 2008)

Wofür bzw. wie genau brauchst du denn die Größe? 

Ark


----------



## SlaterB (24. Sep 2008)

```
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        String[] array = new String[1];
        System.out.println(size(array));
        array[0] = "";
        System.out.println(size(array));
        array[0] = "a";
        System.out.println(size(array));
        array[0] = "Hallo";
        System.out.println(size(array));
        array[0] = "Hallo12345678901234567890123456789012345678901234567890";
        System.out.println(size(array));
        for (int i = 0; i < 300; i++)
        {
            array[0] = "";
            for (int j = 0; j < i; j++)
            {
                array[0] += ((char)j);
            }
            System.out.println(size(array)+", "+array[0].length());
        }
    }

    public static int size(Object o)
        throws Exception
    {
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(bo);
        oo.writeObject(o);
        oo.close();
        return bo.toByteArray().length;
    }

}

->

Ausgabe:
45
47
48
52
102
47, 0
49, 1
50, 2
51, 3
52, 4
[..]
171, 123
172, 124
173, 125
174, 126
175, 127
176, 128
178, 129
180, 130
182, 131
184, 132
186, 133
[..]
```

45 Byte für die ganze Serialisierung an sich sowie das Array,
nur 2 Bytes mehr für einen Leerstring, erstaunlich wenig, da wird vielleicht sehr sparsam gespeichert,
Serialisierung muss nicht unbedingt dem ganzen Objekt im Speicher entsprechen,

für die Buchstaben dann anfangs nur 1 Byte (edit: beim ersten Buchstaben sind es hier immer 2 Bytes), 
zumindest in der Serialisierung werden kleine chars anscheinend sehr platzsparend gespeichert, 
muss für den Arbeitsspeicher oder sonstige Speicherungen nix heißen,

ab char 128 reicht der byte-Platz nicht mehr und es müssen 2 Bytes pro Buchstabe sein


----------



## Wildcard (24. Sep 2008)

SlaterB hat gesagt.:
			
		

> ab char 128 reicht der byte-Platz nicht mehr und es müssen 2 Bytes pro Buchstabe sein


Oder eben mehr.


----------



## Ark (24. Sep 2008)

Kann es sein, dass bei der Serialisierung diese spezielle UTF-8-Kodierung (mit dem Doppel-NUL) zum Einsatz kommt?

Ark


----------

