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 回答