使用java识别和分离Datagrampacke数据包中的数据

时间:2012-10-17 01:41:55

标签: java android dataformat

您好目前我正在使用Android通过蓝牙与医疗保健设备进行通信。医疗保健设备可以发送格式为enter image description here

的数据包

现在我想知道,我如何分别识别LSB,Acces代码,Header,Msb和Payload。以及如何从此数据包中检索数据。我真的是这种数据包开发的新手。我用谷歌搜索,但我只得到了理论上的解决方案。另外我想知道,我是否可以使用Datagrampacket或其他第三方API。请有人向我推荐一些想法和教程。提前谢谢。

2 个答案:

答案 0 :(得分:1)

DataInputStream是你的朋友。将它包裹在围绕DatagramPacket的数据,偏移量和长度的ByteArrayInputStream周围。然后将readBytes()用于9字节数组,将访问代码readBytes()转换为7字节数组以获取标头,其余为有效负载。

修改

  

标题真的是54位吗?当然应该是56?

答案 1 :(得分:1)

尝试使用以下方法:

(2475位?它应该是2472或2480,或者如果标题是54位,这里应该是2474位)     //读取字节

public byte[] readBytes(InputStream inputStream, int length)
        throws IOException {
    byte[] data = new byte[length];
    int len = inputStream.read(data);
    if (len != length) {
        throw new IOException("Read the end of stream.");
    }
    return data;
}


//Get Header data
byte[] headerData = readBytes(inputStream, 9);

// I think header data need to parse again, its structure should look like the following format:
// | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
// |  Version  | Type  | other values  |
// You can parse them to use headerData


// #######################################
// write bytes
public class ByteWriter {
    private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    public void writeBytes(byte[] data) {
        try {
            outputStream.write(data);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public byte[] getBytes() {
        return outputStream.toByteArray();
    }
}