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

N. *_*hra 5 bytebuffer kotlin aws-sdk amazon-kinesis-kpl

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

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

Jar*_*vis 8

检查下面的方法

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()
}
Run Code Online (Sandbox Code Playgroud)

您可以根据数据类型大小分配大小,例如 Int 4 字节、Double 和 Long 8 字节

用于读回 dataType

  val byteBuffer = ByteBuffer.wrap(byteArray)
        byteBuffer.get(Int) //Int variable
        byteBuffer.get(Double) //Double variable
        byteBuffer.get(nonce)
Run Code Online (Sandbox Code Playgroud)


N. *_*hra 1

感谢所有的建议。

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

val objectMapper = ObjectMapper()
objectMapper.registerModule(JavaTimeModule())
val buf = ByteBuffer.wrap(objectMapper.writeValueAsString(className).toByteArray(Charsets.UTF_8))
Run Code Online (Sandbox Code Playgroud)

反序列化代码:

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

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

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@JsonFormat(pattern = "YYYY-MM-dd HH:mm")
var edd: LocalDateTime?,
Run Code Online (Sandbox Code Playgroud)