大发龙虎首页    注册   登录
大发龙虎 = way to explore
大发龙虎 是一个大发龙虎关于 分享和探索的地方
现在注册
已注册用户请  登录
gramyang
大发龙虎  ›  Java

请教一个 go 与 Java 的编码交互问题

  •  
  •   gramyang · 240 天前 · 1597 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端 android,后端 go,用 socket 进行连接。数据包的格式相同(长度-类型-数据),但是在拆包的时候仍然遇到了问题。
    前端代码如下:
    ByteBuffer bb = ByteBuffer.allocate(4 + body.length);
    bb.order(ByteOrder.LITTLE_ENDIAN); //与 cellnet 匹配
    bb.putShort((short)body.length);
    bb.putShort((short)1024);
    bb.put(body);
    后端代码如下:
    pkt := make([]byte, bodySize+msgIDSize+len(msgData))
    binary.LittleEndian.PutUint16(pkt, uint16(msgIDSize+len(msgData)))
    binary.LittleEndian.PutUint16(pkt[bodySize:], uint16(msgID))
    copy(pkt[bodySize+msgIDSize:], msgData)
    err := WriteFull(writer, pkt)

    数据都是用 protobuf 序列化的,长度和类型是用的小端,长度分别为 2 字节。只是 java 和 go 的 api 不一样,java 用的是 ByteBuffer 的 putShort,而 go 用的是 binary.LittleEndian.PutUint16,大发龙虎我 猜测拆包错误是这两个大发龙虎方法 的底层编码不同。

    求大佬指点!!
    1 条回复    2019-10-09 18:26:58 +08:00
    gramyang
        1
    gramyang   240 天前
    搞定了!! putshort 和 putuint16 的编码没有问题。是大发龙虎我 这里一个小地方拆包出错了。
    大发龙虎关于   ·   FAQ   ·   API   ·   大发龙虎大发龙虎我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小大发龙虎工具   ·   2814 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:15 · PVG 13:15 · LAX 22:15 · JFK 01:15
    ♥ Do have faith in what you're doing.