starwing / lua-protobuf

A Lua module to work with Google protobuf
MIT License
1.71k stars 388 forks source link

pb.load解析protoc.exe编译后的二进制pb文件出错 #221

Closed LiShiZhenDePi closed 1 year ago

LiShiZhenDePi commented 1 year ago

使用谷歌官方的protoc编译proto文件后得到二进制pb文件,代码读取pb文件后调用pb.load接口,读取到第二个字符就出错了。 对比了一下protoc:compile()返回的二进制数据,发现其与protoc.exe生成的二进制数据有很大差异。

starwing commented 1 year ago

有差异是正常的,Lua表的顺序是不确定的。但是肯定可以载入。检查一下你的数据在Lua测是不是被0截断了。

LiShiZhenDePi commented 1 year ago

感谢作者指点,测试后发现确实是因为数据在lua侧被0截断导致读取失败。 从Unity的AB包(将pb文件打包成AB)读取AssetText,发现读取出来的字符长度远低于pb文件本身的字符长度。 查询lua的官方文档后发现要通过LuaInterface.LuaByteBuffer封装一下才能读取完整的字符。