2017-03-07 219 views
0

我正在發送一個JMSBytesMessage,我從文件中讀取。我可以將字節數組寫回到沒有問題的文件中。但是,如果我將它發送到JMS隊列並檢索它並嘗試將其打印到文件中,則它是不可讀的。JMS損壞字節消息

Files.readAllBytes(Paths.get(file.getPath())) 

Files.write(filename, message.getBytes(), StandardOpenOption.CREATE); 

我就編碼爲Base64,這使得從隊列中取出之後更大的兩項KB,但不會使之成爲什麼我可以閱讀。我不瞭解BytesMessages嗎?

回答

3

您的代碼是...奇怪或不完整
如何從JMS消息中獲取字節?您是從隊列中獲得的message JMS BytesMessage?類BytesMessage中沒有getBytes()方法。
要從BytesMessage得到的字節數,請執行下列操作:

BytesMessage msg = ... // Obtain the message from the Q 
byte[] data = new byte[(int) msg.getBodyLength()]; 
msg.readBytes(data); 

然後到字節寫入

Files.write(filename, data, StandardOpenOption.CREATE); 
+0

我已經投票決定關閉我的問題一個文件,因爲你是對的,它是可怕的不清楚。消息屬於包裝JMSBytesMessage的類。但是,你的回答救了我。我忘記了readBytes行!我基本上正在閱讀一個空的字節數組,它奇怪地是不產生空文件。 – Steve