1

getbytes()and Stringコンストラクターを使用して、JavaでStringをbyte []に​​変換し、次にbyte[]をStringに変換しています。

String message = "Hello World";
byte[] message1 = message.getbytes();

PipedInput / OutputStreamを使用して、これを別のスレッドに送信します。ここで、

byte[] getit = new byte[1000];
pipedinputstream.read(getit);
print(new String(getit));

この最後の印刷結果は1000で印刷されます...実際の文字列の長さが必要です。どうやってやるの?

4

4 に答える 4

1

文字列を読み取るときは、読み取ったバイト数を取得し、文字列に長さを指定する必要があります。

byte[] getit = new byte[1000];
int readed = pipedinputstream.read(getit);
print(new String(getit, 0, readed));

文字列が1000バイトより長い場合、切り捨てられることに注意してください。

于 2012-05-14T09:25:18.297 に答える
1

読み取られたバイト数を無視しています。以下のようにしてください:

  byte[] getit = new byte[1000]; 
  int bytesRead = pipedinputstream.read(getit); 
  print(new String(getit, 0, bytesRead).length()); 
于 2012-05-14T09:29:19.383 に答える
0
public String getText (byte[] arr)
{
StringBuilder sb = new StringBuilder (arr.length);

for (byte b: arr)
    if (b != 32)
        sb.append ((char) b);

return sb.toString ();
}

それほどきれいではありませんが、動作するはずです。

于 2012-05-14T09:30:32.827 に答える
-1

文字列をbyte[]に変換してから、byte[]をStringに変換しています

なんで?往復は機能しないことが保証されています。文字列はバイナリデータのコンテナではありません。これをしないでください。壁に頭をぶつけるのはやめましょう。しばらくすると痛みは止まります。

于 2012-05-14T09:54:04.760 に答える