MQTT- JAVA客户端程序

时间:2018-11-16 12:37:07

标签: java mqtt paho

我已经用Java编写了PAHO客户端MQTT程序,并使用了mosquitto-broker。

发布者代码段发布者发送的数字从0到254。

char[] charset = new  char[255]; 
for(int i=0;i< 255;i++)
{
    charset[i] = (char)i;
    System.out.println(i+" "+(int)charset[i]);
}

String str2 = String.valueOf(charset);
MqttMessage message1 = new MqttMessage();
message1.setPayload(str2.getBytes());            
client.publish("temperature",message1);

订户代码段: 预计订户将收到0到25​​4之间的数字。

byte[] ascii = message.getBytes(); 
for (int i = 0; i <ascii.length; i++) 
{                         
       System.out.println(i +" "+(long)(ascii[i] & 0xFF));                                           
}

输出快照: Publisher output

subscriber ouput

订户输出中的问题:

  

订户输出中从128到159的索引正在接收值'63',而不是   从发布商方发送的正常号码。

1 个答案:

答案 0 :(得分:2)

为什么不使用字节数组

发布者

byte[] payload = new byte[255]; 
for(int i = 0; i < 255;i ++) {
    payload[i] = (byte)i;
}

message.setPayload(payload);            
client.publish("temperature", message);

订户

byte[] paylaod = message.getPayload();
for (int i = 0; i < payload.length; i++) {                         
       System.out.println(i +" "+(int)(payload[i] & 0xFF));                                           
}

但是问题主要与Java如何编码String char是16位UTF-16编码字符有关。字符串是“具有附加功能的字符数组”。

因此,如果您调用String#getBytes(),则UTF-16数据将转换为UTF-8,这将导致数据丢失。字符串不能用于承载二进制数据