将ByteMessage转换为String?

时间:2012-06-12 18:39:11

标签: java jms

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 个答案:

答案 0 :(得分:2)

BytesMessage specification有一个方法readUTF()可能会有所帮助。只需调用此方法,就可以将BytesMessage中的所有行替换为String的定义。

答案 1 :(得分:1)

好吧,首先调用readBytes(byte [])可能更有效。

第二,您使用平台字符编码将字节转换为字符串,这总是很危险的。你应该使用一个明确的字符集。已知为消息类型指定的一个,或者可能包含为消息属性的字符集。

答案 2 :(得分:0)

这可能会帮助你

 String msg = byteArr.readUTF();

您也可以使用

来避免循环
 byteMessage.readBytes(byteArr);

答案 3 :(得分: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来避免整个喧嚣。