前言
一般untiy中网络处理都是使用C#,但是如果使用lua做热更开发的话,很多逻辑需要在lua端写,比如网络协议,会使用lua-protobuf,lua-pbc等。那么网络的字节拼接就需要在lua端拼接好,再回传给C#,
目前拼接字节有两种方案:
1.使用C#的MemoryBuffer+BinaryReader和BinaryWriter进行拼接
2.使用lua的string.pack和string.unpack进行拼接
如果使用C#进行拼接,那么最好是在C#端直接做,如果在lua端做,就需要lua调用C#的代码。但是网络数据是很频繁的,如果频繁的这么操作,就可能带来性能问题,产生大量gc
语法
下面就介绍下如何使用lua自带的pack机制处理字节流byte[]
语法:
string.pack (fmt, v1, v2, ···)
返回一个打包了(即以二进制形式序列化) v1, v2 等值的二进制字符串。 字符串 fmt 为打包格式(参见 §6.4.2)。
string.unpack (fmt, s [, pos])
返回以格式 fmt (参见 §6.4.2) 打包在字符串 s (参见 string.pack) 中的值。 选项 pos(默认为 1 )标记了从 s 中哪里开始读起。 读完所有的值后,函数返回 s 中第一个未读字节的位置。
其中fmt,格式很多,加下表:https://www.runoob.com/manual/lua53doc/manual.html#6.4.2
<