2017-03-07 218 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