Iがソケットから見えるバイト配列内の文字列を受け取る。文字列変換のバイト配列の文字列の終わりを検出するにはどうすればいいですか?
[128,5,6,3,45,0,0,0,0,0]
ネットワークプロトコルによって指定されたサイズは、(ゼロを含む)の文字列の合計な長さであるので、私のexemple 10.
私は単純に行う場合:
String myString = new String(myBuffer);
私は、文字列5不正解caracterの最後に持っています。変換は文字列caracter(0)の終わりを検出していないようです。正しいサイズと私はこれを行う正しい文字列を取得するには
:
int sizeLabelTmp = 0;
//Iterate over the 10 bit to get the real size of the string
for(int j = 0; j<(sizeLabel); j++) {
byte charac = datasRec[j];
if(charac == 0)
break;
sizeLabelTmp ++;
}
// Create a temp byte array to make a correct conversion
byte[] label = new byte[sizeLabelTmp];
for(int j = 0; j<(sizeLabelTmp); j++) {
label[j] = datasRec[j];
}
String myString = new String(label);
は、問題を処理するためのより良い方法はありますか?
おかげ
+1エンコードを考慮してください。ソケット経由で受け取ったものがシリアル化されたJava Stringであれば大丈夫です。 –
@G_H:「ちょうどシリアライズされたJava String」は、シリアライズ形式が何であるかを実際に指定していません。 OPがJavaバイナリのシリアル化を使用していた場合は、とにかくこの操作を明示的にやっていないでしょう...もしそれが他のシリアル化形式であれば、*を*知る必要があります。 –
私はおそらく話を止めるべきです...事実、私はいつも直列化から離れていて、その細部をよく知っていません。 JAXBまたはJPAは通常、私がオプションと考える唯一のものです。 –