Java - Как декодировать кодированный массив CBOR byte[]?

Я получаю данные с сервера - это массив byte[], закодированный CBOR, и для его декодирования я использую реализацию cbor-java.

    byte[] decodedMessage = { 0x78, (byte)0x9c, 0x5b, (byte)0xe4, 0x58, 0x10}
    ByteArrayInputStream bais = new ByteArrayInputStream(decodedMessage);
    List<DataItem> dataItems = new CborDecoder(bais).decode();
    for(DataItem dataItem : dataItems) {
    }

Если у вас есть некоторый опыт в этом, вы можете объяснить мне, как я могу получить декодированное содержимое массива, а не объект DataItem.

2 ответа

Решение

DataItem уже очень близок к тому, что вы хотите. Сначала вам нужно проверить, какой тип DataItem:

for (DataItem dataItem : dataItems) {
    System.out.println("the type of this dataItem is " + dataItem.getMajorType());
    switch(dataItem.getMajorType()) {
        UNSIGNED_INTEGER:
            UnsignedInteger unsignedInteger = (UnsignedInteger) dataItem;
            System.out.println("the value of this dataItem is " + unsigendInteger.getValue());
        /* ... add missing ones */
        default:
            System.out.println("unknown type: " + dataItem.getMajorType());
    }
}

При этом вы можете читать данные, которые находятся внутри вашего байтового массива. Вам просто нужно адаптировать его под те ценности, которые вам нужны.

Вы рассматривали возможность использования https://github.com/FasterXML/jackson-dataformats-binary? Библиотека имеет очень хорошую производительность и похожа на работу с JSON.

Другие вопросы по тегам