Kotlin中操作二进制数据

AI智能摘要
本文探讨了在Kotlin中处理二进制数据的实用方法,以解决纯文本JSON传输无法发送二进制数据的问题。作者的核心思路是使用ByteBuffer作为二进制数据的载体,并定义了一个名为OPCodePacket的数据类。该类包含op(操作码)和body(消息体)字段,并提供了toByteArray方法将对象编码为字节数组,以及通过伴生对象的fromByteArray方法从ByteBuffer中解码还原对象。
— AI 生成的文章内容摘要

因为自己写的kwsify是通过过纯文本json发送数据帧的如果想发送二进制数据的话就没办法了于是我就了解了一下kotlin中操作二进制数据的方法下面就是具体思路

  1. 首先需要编码/解码二进制需要一个数据载体这个载体就是ByteBuffer(当然也可以是DataOutputStream)这里为了更清楚的操作二进制我就使用ByteBuffer来操作
  2. 还需要一个数据类来存放解码后/编码前的人类可读数据
data class OPCodePacket(
    val op: Int,
    val body: String
) {
    fun toByteArray(): ByteArray {
        val bodySize = body.toByteArray().size
        val body = body.toByteArray()
        val totalLength = 4 + 4 + bodySize
        val buffer = ByteBuffer.allocate(totalLength).apply {
            putInt(op)
            putInt(bodySize)
            put(body)
        }
        return buffer.array()
    }

    companion object {
        fun fromByteArray(buffer: ByteBuffer): OPCodePacket {
            buffer.flip()
            val op = buffer.int
            val bodySize = buffer.int
            val body = ByteArray(bodySize).apply {
                buffer.get(this)
            }
            return OPCodePacket(op, String(body))
        }
    }
}
温馨提示:

1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:xiaoman1221@yhdzz.cn,工作室将第一时间处理!

2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。

3.所有资源仅限于参考和学习,版权归原作者所有。

Kotlin默认

Kotlin中解析QQ音乐和网易云音乐歌词的工具类

2025-1-2 15:33:43

Kotlin

Kotlin基础教程

2025-1-15 20:20:23

21 条回复 A文章作者 M管理员
  1. 霜降

    蹲个后续,看看怎么加CRC校验这块儿

  2. 威尼斯运河

    那如果body里还有嵌套结构咋办,还得递归解析?

  3. 兔儿绒

    楼主用ByteBuffer是想跨平台吧?M1应该没问题。

  4. 墨染疏影

    蛮好的方案,就是不知道高并发下稳不稳。

  5. 这代码看着顺滑,不过边界检查是不是少了点?

  6. 呆萌小企鹅

    DataOutputStream虽然简单,但控制力没这么细吧。

  7. 周末的早餐

    前几天自己也搞了个类似的包解析,真的头大。

  8. 暗物质潮汐

    写得挺清楚的,比那些云里雾里的强多了。

  9. 胡杨风沙

    那如果是变长字段的情况咋处理?

  10. 率真直爽人

    蛮好的,比网上那些抄来抄去的强

  11. 梦曦微光

    蹲个后续,看看怎么处理粘包拆包的

  12. 和风拂面

    bodySize先读再分配数组,不怕恶意数据搞崩吗?

  13. 又是纯手搓协议解析,作者肝帝实锤了 👍

  14. 疾风之箭

    求问下这个OPCodePacket能直接用在Ktor里不?

    • 饕餮噬

      求问这个配置在Ktor里能直接用吗?

  15. 逸舟

    hhh 二进制操作写成这样也算清晰了

    • RTAkland

      粘包问题来了,坐等作者出下一集hhh

  16. 诅咒之链

    感觉还行,但DataOutputStream不是更简单点?

  17. 狼啸月光

    前几天刚搞完类似的东西,确实折腾了好久

  18. NamiWave

    这ByteBuffer用得挺溜啊,不过M1上跑会有兼容问题吗?

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索