如何在Kotlin中将数据类转换为ByteBuffer?

问题描述 投票:0回答:3

我正在尝试使用Kinesis,它需要字节缓冲区格式的数据。到目前为止我看到的所有示例都是Java并传递简单的字符串。任何人都可以知道如何将kotlin数据类转换为bytebuffer?

例如数据类abc(var a:Long,var b:String,var c:Double)

kotlin aws-sdk bytebuffer amazon-kinesis-kpl
3个回答
0
投票

检查以下方法

fun toByteArray(): ByteArray? {
val size: Int = 8 + 8 + string.Size

val byteBuffer = ByteBuffer.allocate(size)
        .put(long) //long veriable 
        .put(double) // double veriable 
        .put(string)


   return byteBuffer.array()
}

您可以根据DataType大小分配大小,如Int 4字节,Double和Long 8字节

用于读回dataType

  val byteBuffer = ByteBuffer.wrap(byteArray)
        byteBuffer.get(Int) //Int variable
        byteBuffer.get(Double) //Double variable
        byteBuffer.get(nonce)

0
投票

你可能想看看kotlinx.serialization。这是一个官方的Kotlin项目,支持几个formats开箱即用。您可以使用输出并使用ByteBuffer.wrap将其包装


0
投票

感谢所有的建议。

使用Jackson库(jackson-databind)的ObjectMapper()和注释解决了这个问题。以下代码用于序列化:

val objectMapper = ObjectMapper()
objectMapper.registerModule(JavaTimeModule())
val buf = ByteBuffer.wrap(objectMapper.writeValueAsString(className).toByteArray(Charsets.UTF_8))

反序列化代码:

val objectMapper = ObjectMapper()
objectMapper.registerModule(JavaTimeModule())
val obj = objectMapper.readValue(Charsets.UTF_8.decode(record.data()).toString(), ClassName::class.java)

除此之外,我必须添加所有数据类的构造函数,并且必须将以下注释添加到所有LocalDateTime属性:

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@JsonFormat(pattern = "YYYY-MM-dd HH:mm")
var edd: LocalDateTime?,
© www.soinside.com 2019 - 2024. All rights reserved.