gpt4 book ai didi

arrays - 如何在 Kotlin 中将对象转换为字节数组

转载 作者:行者123 更新时间:2023-12-02 13:31:40 31 4
gpt4 key购买 nike

我有一个 Kotlin 对象,需要将其转换为字节数组 (byte[])。我了解如何将 String 和一系列其他类型的变量转换为 byte[],但我找不到任何有关使用对象执行此操作的信息。

这是我尝试过的:

override fun activateQuestion(instructorUserName: String, host: String, port: Int, questionToActivate: MultipleChoiceQuestion) {
val socket = DatagramSocket()

//This is the problem -- `.toByteArray(...)` only works for Strings
val questionToActivateAsByteArray = questionToActivate.toByteArray(Charsets.UTF_8)

//send byte[] data
val packet = DatagramPacket(questionToActivateAsByteArray, questionToActivateAsByteArray.size, InetAddress.getByName(host), port)
socket.send(packet)
}

最佳答案

可以转成java风格的bytearray。像这样:Java Serializable Object to Byte Array

编辑:为了更容易,它的实用函数将如下所示:

import java.io.*

@Suppress("UNCHECKED_CAST")
fun <T : Serializable> fromByteArray(byteArray: ByteArray): T {
val byteArrayInputStream = ByteArrayInputStream(byteArray)
val objectInput: ObjectInput
objectInput = ObjectInputStream(byteArrayInputStream)
val result = objectInput.readObject() as T
objectInput.close()
byteArrayInputStream.close()
return result
}

fun Serializable.toByteArray(): ByteArray {
val byteArrayOutputStream = ByteArrayOutputStream()
val objectOutputStream: ObjectOutputStream
objectOutputStream = ObjectOutputStream(byteArrayOutputStream)
objectOutputStream.writeObject(this)
objectOutputStream.flush()
val result = byteArrayOutputStream.toByteArray()
byteArrayOutputStream.close()
objectOutputStream.close()
return result
}

使用它们只是做类似的事情:

val yourSerializableObject = YourSerializableObject(...)
val objectInByteArrayFormat = yourSerializableObject.toByteArray()
val convertedObject = fromByteArray<YourSerializableObject>(objectInByteArrayFormat)

不要忘记您的对象及其所有属性必须是可序列化的

关于arrays - 如何在 Kotlin 中将对象转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61046511/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com