2

ByteMessageに変換する最良の方法は何Stringですか? 次のコードがありますが、もっとクリーンな方法はありますか?

BytesMessage byteMessage; // set byteMessage

byte[] byteArr = new byte[(int)byteMessage.getBodyLength()];

for (int i = 0; i < (int) byteMessage.getBodyLength(); i++) {
    byteArr[i] = byteMessage.readByte();
}
String msg = new String(byteArr);   
4

4 に答える 4

3

BytesMessage 仕様には、役立つメソッド readUTF() があります。BytesMessage から String の定義までのすべての行を、このメソッドの呼び出しに置き換えるだけです。

于 2012-06-12T18:48:06.253 に答える
1

まず、readBytes(byte[]) を呼び出す方が効率的でしょう。

次に、プラットフォームの文字エンコーディングを使用してバイトを文字列に変換していますが、これは常に危険です。明示的な文字セットを使用する必要があります。メッセージタイプに指定されていることがわかっているもの、またはメッセージプロパティとして含まれている可能性のある文字セットのいずれかです。

于 2012-06-12T18:46:58.857 に答える
0

これはあなたを助けるかもしれません

 String msg = byteArr.readUTF();

を使用してループを回避することもできます

 byteMessage.readBytes(byteArr);
于 2012-06-12T18:40:11.820 に答える
0

これらのバイトが UTF-8 でエンコードされていることがわかっている場合は、BytesMessage.readUTF()便利な方法を使用します。

String s = byteMessage.readUTF();

byte[]配列が異なる文字エンコーディング (UTF-16 など) でエンコードされた文字列を表す場合は、String(byte[], java.lang.String)コンストラクタを使用します。

byte[] byteArr = new byte[(int)byteMessage.getBodyLength()];
byteMessage.readBytes(byteArr); 
String msg = new String(byteArr, "UTF-16");  

最後に、TextMessageハッスル全体を回避するために使用することを検討してください。

于 2012-06-12T18:45:35.330 に答える