nullterminierten String einlesen
-
Hallo,
ich möchte einen ein Wort aus einem C++ Programm per Socket
an ein Java-ServerSocket schicken. Dieses Wort soll, wie in C++
üblich mit "\0" terminiert sein...
Gibt es etwas wie readLine für \0 Terminierung oder muss ich
das in nen Array einlesen und kucken, wo \0 steht und dann nen String
daraus machen?Gruß,
NullTerminierung
-
In Java sind Zeichenketten Objekte und keine char-Arrays (wie in C). Sie sind weder nullterminiert (wie in C), noch besitzen sie ein spezielles Byte für die Länge.
Somit bleibt dir nichts anderes übrig als nach dem \0 zu suchen und aus dem Array dann einen String zu machen.
-
Hi
ggf könntest du auch den /0 durch ein Linefeed (0x0d o 0x0a o 0x0d, 0x0a) ersetzen, das dann in einen Stringstream packen und von dort dann mit readLine auslesen.
gruss
-
Ich werde mein Protokoll sicherlich nicht an eine
bestimmte Application anpassen (erst Recht keine Java-Application).
-
Die beste Lösung ist mit Sicherheit, die Länge des Strings vorher anzugeben, als Steinzeit-mäßig auf eine binäre 0 zu warten. Einfach die ersten 4 Bytes immer ein 32-Bit int sein lassen und noch festlegen, ob big endian, oder low endian.
-
scnr
@Optimier:
MfG SideWinder
-
Hatte ich mir auch schon überlegt...
ob big endian, oder low endian
Der Unterschied ist klar...
Wie kann ich denn zwischen den beiden Typen in Java konvertieren?
Muß ich das manull machen oder gibts da irgendwo helper-Klassen?NullTerminierung
-
Seh ich direkt grad nicht. Aber zumindest gibts in Integer mal ne Methode, um die Byte-Reihenfolge umzudrehen. Aber schwer ist die Thematik ja nicht. Irgendwie so:
for( int i = 0; i < 4; ++i ) { int current = read(); if( current == -1 ) throw new EOFException( "End of Stream was recognized before reading of int was complete." ); result <<= 8; result += current; }
würde wohl low endian gehen.
-
Unicode String odr nisch? 2 Bytes pro Zeichen. Pass mal mit der länge genau auf.
-
Es sieht so aus, als würde er dort einen Integer bauen und die haben, soweit ich weiß, 4 byte.