如何从 WMQTextMessage.java 获取 ByteBuffer 主体而不是调用 getText()?
How can I get ByteBuffer body from WMQTextMessage.java instead of calling getText()?
我有一个 Spring 引导应用程序,它正在使用 JMS API 侦听 IBM MQ。该应用程序 运行 处于内存严重受限的环境中。
我收到一个 TextMessage
对象。我可以调用 getText()
并以 String
形式获取消息内容,但此 String
实际上是从 WMQTextMessage.java
中已存在的 ByteBuffer
创建的。因此,我不想调用 getText()
,因为从 ByteBuffer
创建新的 String
会占用更多内存。
相反,我想直接从 WMQTextMessage.java
获取 ByteBuffer
。 WMQTextMessage.java
里面有一个方法叫做public byte[] _exportBody
,但是我觉得不能调用这个方法。
有人可以帮我解决这个问题吗?这是我的简单代码:
@JmsListener()
public void messageListener (TextMessage message) {
String data = message.getText(); //need to avoid this and get data in byte[] to save space
}
如果 _export()
是 WMQTextMessage
上的 public
方法,那么您应该能够将 TextMessage
转换为 WMQTextMessage
并调用它没问题,例如:
@JmsListener()
public void messageListener (TextMessage message) {
byte[] data = ((WMQTextMessage)message)._export();
}
然而,由于 _export()
方法 returns a byte[]
而 not a ByteBuffer
那么几乎可以肯定 将ByteBuffer
中的数据复制到新的byte[]
中,因此会像调用getText()
.
一样使用额外的堆
据我所知,IBM MQ 是闭源的。如果您正在反编译客户端 jar 以实际查看 WMQTextMessage.java
,那么您可能违反了与 IBM 甚至 DMCA 的软件许可协议。对于如此无害的事情来说,这听起来可能很愚蠢,但是围绕技术的法律往往很愚蠢,因为编写这些法律的人通常一开始并不了解技术的细微差别。我建议您直接与 IBM 合作以获得这些具体问题的答案。
我有一个 Spring 引导应用程序,它正在使用 JMS API 侦听 IBM MQ。该应用程序 运行 处于内存严重受限的环境中。
我收到一个 TextMessage
对象。我可以调用 getText()
并以 String
形式获取消息内容,但此 String
实际上是从 WMQTextMessage.java
中已存在的 ByteBuffer
创建的。因此,我不想调用 getText()
,因为从 ByteBuffer
创建新的 String
会占用更多内存。
相反,我想直接从 WMQTextMessage.java
获取 ByteBuffer
。 WMQTextMessage.java
里面有一个方法叫做public byte[] _exportBody
,但是我觉得不能调用这个方法。
有人可以帮我解决这个问题吗?这是我的简单代码:
@JmsListener()
public void messageListener (TextMessage message) {
String data = message.getText(); //need to avoid this and get data in byte[] to save space
}
如果 _export()
是 WMQTextMessage
上的 public
方法,那么您应该能够将 TextMessage
转换为 WMQTextMessage
并调用它没问题,例如:
@JmsListener()
public void messageListener (TextMessage message) {
byte[] data = ((WMQTextMessage)message)._export();
}
然而,由于 _export()
方法 returns a byte[]
而 not a ByteBuffer
那么几乎可以肯定 将ByteBuffer
中的数据复制到新的byte[]
中,因此会像调用getText()
.
据我所知,IBM MQ 是闭源的。如果您正在反编译客户端 jar 以实际查看 WMQTextMessage.java
,那么您可能违反了与 IBM 甚至 DMCA 的软件许可协议。对于如此无害的事情来说,这听起来可能很愚蠢,但是围绕技术的法律往往很愚蠢,因为编写这些法律的人通常一开始并不了解技术的细微差别。我建议您直接与 IBM 合作以获得这些具体问题的答案。