自己对接文档的时候遇到的一些问题
**上面是对接文档给出的websocket主动上报抓拍的文档,
直接获取message取到的数据为**
是
没法取到值的
之后解决的方法如下
@Override//这个方法是java服务端websocket接到数据的时候触发的犯法public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {//先吧message这个参数转换为ByteBuffer类型ByteBuffer bf = (ByteBuffer)message.getPayload();//然后把ByteBuffer类型转喜欢为 byte数组byte [] recbyte = bf.array();//下面定义的找个数组是 JOSN的长度 上面图中说了 JSON 2进制表示 4个字节长度 所以Byte数组长度为0 byte [] lengbytes = new byte[4];//这个方法是把recbyte从第8位开始截 将截取到的Byte数组给到 lengtybes 放到0 -4 个字节中System.arraycopy(recbyte,8,lengbytes,0,4);//获取到 byte数组的长度 整个获取长度的方法是一个工具方法 在下面int leng = byteArrayToInt(lengbytes);//再新建一个Byte数组 长度为刚获取到的长度byte [] databytes = new byte[leng];//同理将整个byte数组从16位开始截 ,因为上图中头文件占据8+4+4的长度, 将截取到的东西给 新建的获取到长度的数据 从0 -最大的长度System.arraycopy(recbyte,16,databytes,0,leng);//然后将其转换成String类型String str = new String(databytes,"UTF-8");System.out.println(str);
}
下面的就是获取Byte数组长度的那个方法
private int byteArrayToInt(byte[] b) {return b[0] & 0xFF |(b[1] & 0xFF) << 8 |(b[2] & 0xFF) << 16 |(b[3] & 0xFF) << 24;
}