2012-06-12 65 views
1

將ByteMessage轉換爲String的最佳方式是什麼?我有這樣的代碼,我們有更簡潔的方法嗎?Java將ByteMessage轉換爲String?

感謝

  BytesMessage 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); 
+0

你是什麼意思?更多的細節,請 – user595234

+0

明顯的方法是'byteMessage.toString()',或者你想要其他格式? – elias

+0

我只需要正文信息,而不是標題... – user595234

回答

1

好吧,首先調用readBytes(byte [])可能會更高效。

秒,您正在使用平臺字符編碼將字節轉換爲字符串,這通常是危險的。你應該使用明確的字符集。已知爲消息類型指定的一個消息,或者可能包含作爲消息屬性的字符集。

+0

如何使用readBytes(byte [])? alwyays confusing ... – user595234

+0

@ user595234 - 'byteMessage.readBytes(byteArr);' – jtahlborn

0

這可能會幫助你

String msg = byteArr.readUTF(); 

您也可避免循環利用

byteMessage.readBytes(byteArr); 
+0

更多詳情請 – user595234

+1

爲什麼不能?我會再次檢查javadoc – tgoossens

+0

你是對的,我很快瀏覽了javadoc,但沒有看到它正在談論2個單獨的案例。 – jtahlborn

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,以避免整個喧囂。

2

BytesMessage specification有一個方法readUTF(),它可能會有所幫助。只需將BytesMessage中的所有行用該方法的調用替換爲String的定義即可。

相關問題