在我目前的项目中,我们尝试启用两个软件组件之间的通信,如下所示。这里,Temperaturesensor
(用JavaSE
编写)组件定期发布传感器测量,用MQTT JavaSE Publisher编写。 CalculateTemp
(用Nodejs
编写)组件使用MQTT Nodejs和接收数据进行了订阅。我的问题是 - 当CalculateAvgTemp
组件收到数据时垃圾(可能问题是TemperatureSensor
正在byte[]
和{{{}发送数据1}}组件方面,数据不是从calculateAvgTemp
转换的.--如何将byte []数据转换为JSON格式?)
byte[]
的发布方法如下。 请注意,在发布到MQTT代理之前,数据会转换为byte。
TemperatureSensor
在数据接收方,public void publish(String topicName, Object arg, Device deviceInfo) {
DataWrapper dw = new DataWrapper();
dw.setObject(arg);
dw.setDevice(deviceInfo);
java.io.ByteArrayOutputStream bstream = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream st;
try {
st = new java.io.ObjectOutputStream(bstream);
st.writeObject(dw);
st.flush();
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = bstream.toByteArray();
try {
pub.publish(topicName, 0, bytes);
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
,代码如下:
CalculateAvgTemp
可能重复的问题是MQTT communication between nodejs and java 但是,建议的解决方案无法正常工作,或者我无法清楚地理解它可以解决问题。
答案 0 :(得分:1)
ObjectOutputStream会将对象转换为序列化Java对象流,这是Java的内部对象表示法,其他任何东西都不能理解(很容易)。
你需要使用像json.org那样的库来构建一个JSON对象(或者像链接问题中所示的那样手工构建一个字符串),它保持与DataWrapper对象相同的状态,然后将JSON对象输出为字符串,可以作为MQTT消息的字节有效负载发送。