J'essaye d'utiliser Kinesis, qui attend des données au format byte buffer. Tous les exemples que j'ai vus jusqu'à présent sont en Java et transmettent des chaînes simples. Quelqu'un peut-il donner une idée de la façon de convertir une classe de données kotlin en bytebuffer?
par exemple classe de données abc ( var a: Long, var b: chaîne, var c: Double )
3 Réponses :
Vérifiez la méthode ci-dessous
val byteBuffer = ByteBuffer.wrap(byteArray) byteBuffer.get(Int) //Int variable byteBuffer.get(Double) //Double variable byteBuffer.get(nonce)
Vous pouvez allouer la taille en fonction de la taille des types de données comme Int 4 octets, Double et Long 8 octets
pour la relecture de dataType
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() }
Vous voudrez peut-être jeter un œil à kotlinx.serialization . Il s'agit d'un projet Kotlin officiel et prend en charge plusieurs formats de prêt à l'emploi. Vous pouvez utiliser la sortie et l'envelopper avec ByteBuffer.wrap
Je l'ai essayé, j'ai obtenu une erreur sur la sérialisation de LocalDateTime.
Merci pour toutes les suggestions.
Résolution du problème en utilisant ObjectMapper () de la bibliothèque Jackson (jackson-databind) et des annotations. Code suivant utilisé pour la sérialisation:
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @JsonFormat(pattern = "YYYY-MM-dd HH:mm") var edd: LocalDateTime?,
code pour la désérialisation:
val objectMapper = ObjectMapper() objectMapper.registerModule(JavaTimeModule()) val obj = objectMapper.readValue(Charsets.UTF_8.decode(record.data()).toString(), ClassName::class.java)
En dehors de cela, j'ai dû ajouter des constructeurs de toutes les classes de données et a dû ajouter l'annotation suivante à tous les attributs LocalDateTime:
val objectMapper = ObjectMapper() objectMapper.registerModule(JavaTimeModule()) val buf = ByteBuffer.wrap(objectMapper.writeValueAsString(className).toByteArray(Charsets.UTF_8))