首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CBOR ByteArray检索数据

从CBOR ByteArray检索数据
EN

Stack Overflow用户
提问于 2021-08-25 08:25:56
回答 1查看 206关注 0票数 1

我正在尝试用Jackson CBOR Dataformats将一个映射序列化为Kotlin中的CBOR,如果键是一个字符串,我可以很容易地检索该键的值,但是当Int中的键时,它对我做的每一个get都返回null,如果我从value ()输出输出,它会给我来自所有键的所有值。

代码如下:

代码语言:javascript
复制
val mapper = CBORMapper()
val map = HashMap<Any,Any>()
map[123] = intArrayOf(22,67,2)
map[456] = intArrayOf(34,12,1)
val cborData = mapper.writeValueAsBytes(map)
println(cborData.toHex())
val deserialized = mapper.readValue(cborData, HashMap<Any,Any>().javaClass)
println(deserialized.get(123)) // returns null
println(values()) // returns all values
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 12:49:01

尝试迭代键并检查类型:

代码语言:javascript
复制
deserialized.keys.iterator().next().javaClass

以上代码,在您的情况下应该打印:

代码语言:javascript
复制
123 - class java.lang.String
456 - class java.lang.String

和:

代码语言:javascript
复制
println(deserialized.get("123"))

指纹:

代码语言:javascript
复制
[22, 67, 2]

看一看文档

模块扩展了标准的Jackson (JsonFactory,JsonParser,JsonGenerator),并与所有高级数据抽象(数据绑定、树模型和可插拔扩展)无缝地工作。

可以使用Kotlin's readValue方法强制类型:

代码语言:javascript
复制
import com.fasterxml.jackson.module.kotlin.readValue

像这样使用它:

代码语言:javascript
复制
val deserialized = mapper.readValue<Map<Int, IntArray>>(cborData)
deserialized.keys.forEach { key -> println("$key - ${key.javaClass}") }
println(Arrays.toString(deserialized[123]))

以上代码打印:

代码语言:javascript
复制
456 - int
123 - int
[22, 67, 2]

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68919370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档