如何在 Kotlin 中将 Data Class 转换为 ByteBuffer?
How to convert a Data Class to ByteBuffer in Kotlin?
我正在尝试使用 Kinesis,它需要字节缓冲区格式的数据。到目前为止我看到的所有示例都在 Java 中并传递简单的字符串。
谁能知道如何将 kotlin 数据 class 转换为字节缓冲区?
例如
数据 class abc (
变种一:长,
变种b:字符串,
变量 c:双
)
检查下面的方法
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()
}
您可以根据数据类型大小分配大小,例如 Int 4 字节、Double 和 Long 8 字节
用于读回数据类型
val byteBuffer = ByteBuffer.wrap(byteArray)
byteBuffer.get(Int) //Int variable
byteBuffer.get(Double) //Double variable
byteBuffer.get(nonce)
您可能想看看开箱即用的 kotlinx.serialization. It is an official Kotlin project and supports several formats。您可以使用输出并将其包装在 ByteBuffer.wrap
感谢所有建议。
使用 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?,
我正在尝试使用 Kinesis,它需要字节缓冲区格式的数据。到目前为止我看到的所有示例都在 Java 中并传递简单的字符串。 谁能知道如何将 kotlin 数据 class 转换为字节缓冲区?
例如 数据 class abc ( 变种一:长, 变种b:字符串, 变量 c:双 )
检查下面的方法
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()
}
您可以根据数据类型大小分配大小,例如 Int 4 字节、Double 和 Long 8 字节
用于读回数据类型
val byteBuffer = ByteBuffer.wrap(byteArray)
byteBuffer.get(Int) //Int variable
byteBuffer.get(Double) //Double variable
byteBuffer.get(nonce)
您可能想看看开箱即用的 kotlinx.serialization. It is an official Kotlin project and supports several formats。您可以使用输出并将其包装在 ByteBuffer.wrap
感谢所有建议。
使用 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?,