Java - 如何解码 CBOR 编码的 byte[] 数组?
Java - How decode CBOR encoded byte[] array?
我从服务器获取数据 - 是一个 CBOR 编码的 byte[] 数组,为了解码我正在使用 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 对象。
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());
}
}
有了它,您可以读取字节数组中的数据。
你只需要根据你需要的值来调整它。
您是否考虑过使用 jackson-dataformats-binary? The library has very good performance,就像使用 JSON 一样。
我从服务器获取数据 - 是一个 CBOR 编码的 byte[] 数组,为了解码我正在使用 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 对象。
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());
}
}
有了它,您可以读取字节数组中的数据。 你只需要根据你需要的值来调整它。
您是否考虑过使用 jackson-dataformats-binary? The library has very good performance,就像使用 JSON 一样。