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

维斯马克·华雷斯

我有一个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)
    }
编码器

以下是对象可序列化的类,该类有助于在Kotlin中将对象转换为字节数组,反之亦然。

public class ObjectSerializer {
    companion object {
        public fun serialize(obj: Any?) : String {
            if (obj == null) {
                return ""
            }

            var baos = ByteArrayOutputStream()
            var oos = ObjectOutputStream(baos)
            oos.writeObject(obj)
            oos.close()

            return encodeBytes(baos.toByteArray())
        }

        public fun deserialize(str: String?) : Any? {
            if (str == null || str.length() == 0) {
                return null
            }

            var bais = ByteArrayInputStream(decodeBytes(str))
            var ois = ObjectInputStream(bais)

            return ois.readObject()
        }

        private fun encodeBytes(bytes: ByteArray) : String {
            var buffer = StringBuffer()

            for (byte in bytes) {
                buffer.append(((byte.toInt() shr 4) and 0xF plus 'a').toChar())
                buffer.append(((byte.toInt()) and 0xF plus 'a').toChar())
            }

            return buffer.toString()
        }

        private fun decodeBytes(str: String) : ByteArray {
            var bytes = ByteArray(str.length() / 2)

            for (i in 0..(str.length() - 1)) {
                var c = str.charAt(i)
                bytes.set(i / 2, ((c minus 'a').toInt() shl 4).toByte())

                c = str.charAt(i + 1)
                bytes.set(i / 2, (bytes.get(i / 2) + (c minus 'a')).toByte())
            }

            return bytes
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中将字节数组转换为Mat对象

如何在Android中将位图转换为字节数组并将字节数组转换为位图?

在C#中将对象列表转换为字节数组

如何在Kotlin中将具有空终止符的字节数组转换为String?

如何在Swift中将Int转换为4个字节的字节数组?

如何在Go中将字节数组转换为字符串数组?

如何在C ++中将浮点数组转换为字节数组(Arduino)

如何在c#中将浮点数组转换为字节数组?

如何在C ++中将64位整数转换为大端字节数组

如何在Java中将字节数组转换为十六进制字符串?

如何在Java中将字符串转换为bcd格式的字节数组?

如何在m子中将字节数组转换为多部分文件

如何在Rust中将字节数组转换为原始类型?

如何在Spring MVC中将字节数组转换为ZipOutputStream?

如何在 TwinCAT3 中将字节数组转换为各种 LREAL(double) 值

如何在PowerShell中将哈希字符串转换为字节数组?

如何在Android Studio中将imageview转换为字节数组?

如何在Python中将字节数组值转换为float

如何在Java中将图像转换为字节数组?

如何在ObjectiveC中将字节数组转换为浮点值?

如何在Java SE中将字节数组转换为Image

如何在C#中将字节数组的子范围转换为字符串

如何在go中将int64转换为字节数组?

如何在Java中将字节数组转换为hexString?

如何在Java中将字节数组转换为String?

如何在Perl中将图像或文本文件转换为字节数组?

如何在php中将字符串转换为ascii字节数组

如何在Java中将整数值转换为'n'位数字ascii字节数组

如何在类似于Java的Perl中将bigint转换为字节数组