Определите и отделите данные от пакета данных Datagrampacke с помощью java

Привет. В настоящее время я работаю над Android, который связывается с устройством Healthcare через Bluetooth. Медицинское устройство может отправлять пакеты данных в следующем формате: введите здесь описание изображения

Теперь я хочу знать, как я могу идентифицировать LSB, код доступа, заголовок, Msb и полезную нагрузку отдельно. и как я могу получить данные из этих пакетов. На самом деле я новичок в разработке такого рода пакетов данных. Я гуглил, но получил только теоретические решения. Также я хочу знать, могу ли я использовать Datagrampacket или какой-либо сторонний API. Пожалуйста, кто-то предложит мне некоторые идеи и учебник для этого. Заранее спасибо.


person Rathakrishnan    schedule 17.10.2012    source источник


Ответы (2)


Попробуйте использовать следующий метод:

(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();
    }
}
person Liu guanghua    schedule 17.10.2012
comment
Спасибо за ваш ответ, Лю, но здесь я не смог найти способа разделить заголовок, код доступа и полезную нагрузку. Как я могу получить значения отдельно. в зависимости от заголовка мне нужно выполнить некоторые другие функции. поэтому мне нужно получить значения заголовков отдельно. Благодарность - person Rathakrishnan; 17.10.2012
comment
Также мне нужно знать, как я могу добавить заголовок вручную. потому что мне нужно отправить пакет на устройство работоспособности с пользовательским заголовком. Можете ли вы предложить некоторые идеи, пожалуйста? - person Rathakrishnan; 17.10.2012
comment
см. последний добавленный контент: ByteWriter - person Liu guanghua; 17.10.2012

DataInputStream — ваш друг. Оберните его вокруг ByteArrayInputStream, обернув данные, смещение и длину DatagramPacket. Затем используйте readBytes() в 9-байтовом массиве, чтобы получить код доступа, readBytes() в 7-байтовом массиве, чтобы получить заголовок, а остальное — полезные данные.

ИЗМЕНИТЬ:

Действительно ли заголовок 54 бита? Это точно должно быть 56?

person user207421    schedule 17.10.2012
comment
о, большое спасибо за ваш повтор EJP .. это заставляет меня прояснить это. где я могу найти подробный учебник по этому. потому что также мне нужно отправить данные в том же формате пакета на устройство Health, которое состоит из некоторых значений заголовка по умолчанию. Как я могу установить заголовок вручную для каждого пакета? - person Rathakrishnan; 17.10.2012
comment
Нет, это формат пакета данных Bluetooth. он содержит только 54 бита заголовка. - person Rathakrishnan; 17.10.2012
comment
@Ramaraj Вам не нужно подробное руководство по этому вопросу. Все, что вам нужно, это Javadoc для DataInputStream. - person user207421; 17.10.2012