首先Lua中不存在byte[]类型,但又不属于userdata,所有的byte[]在lua中的数据类型为string (可以使用type(data)打印出来看),但是在实际使用的过程中和真正的string还是有一些区别
今天在项目中想将服务器转过来的protobuff数据序列化到本地,模拟服务器发消息,简化调试,结果确在序列化与反序列化的时候遇到了一个问题,那就是当
之后把作为“字符串”的data写成文件后
再使用
进行反序列化得到一个异常:
[2021-06-09 16:17:03:3125][NET][Error]:msg process error 1204522 SCPlayBack [string "protobuf/decoder"]:272: Truncated message.
stack traceback:
[C]: in function 'error'
[string "protobuf/decoder"]:272: in function 'field_decoder'
[string "protobuf/protobuf"]:723: in function '_internal_parse'
[string "protobuf/protobuf"]:732: in function 'parse_from_string'
[string "protobuf/protobuf"]:739: in function 'ParseFromString'
解决方法如下:
修改写入方法
为
修改读取方法
为
解释:
b代表二进制,修改后读写都是处理的二进制数据,也就是说虽然byte[]数据在lua中显示类型为string,但是在处理时还是要以二进制的方式进行处理
文章评论