Android端采用MQTT,服务器端采用ActiveMQ,byte[]类型数据转String字符串

MQTT端

在Android前端,使用ActiveMQ会带来很多问题,所以一般的轻量级项目用的都是MQTT,为了保证兼容性,它将默认发送byte类型数据到服务器端,一般是数组也就是byte[],就像下面代码一样。

try {
    MqttMessage message = new MqttMessage();//新建消息
    message.setPayload(sendStr.getBytes());//sendStr是将要发送的字符串,这里被转成byte
    mqttAndroidClient.publish(SEND_TOPIC_NAME, message);//发送
} catch (MqttException e) {
    System.err.println("Error Publishing: " + e.getMessage());
    e.printStackTrace();
}

ActiveMQ端

而在服务器端,要是在测试的时候需要显示byte对应的String字符串,需要这样做,看下面代码。

    private void setGetMessage() throws JMSException {
        //通过事件监听方式来消费接收消息,当有消息时被触发
        this.messageConsumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                //从安卓前端的MQTT发送过来的是byte[]类型,要转换
                if (message instanceof BytesMessage) {  //判断数据类型是否是BytesMessage
                    //强制类型转换,Message是接口或者父类,所以可以用其子类BytesMessage强制转换,ActiveMQ带有的ActiveMQBytesMessage也可以使用
                    BytesMessage bytesMessage = (BytesMessage) message;
                    try {
                        byte[] bytes = new byte[(int) bytesMessage.getBodyLength()]; //得到byte[]数据流
                        bytesMessage.readBytes(bytes); //读取byte
                        String getStr = new String(bytes); //根据byte创建字符串
                        System.out.println("接收到请求" + getStr);
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

注释已经写得比较清楚了,这是今天看了很多教程总结出来的,花了两三个小时,有所收获。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值