加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用lua实现ByteArray和ByteArrayVarint

发布时间:2020-12-14 22:10:53 所属栏目:大数据 来源:网络整理
导读:2014-01-10更新: ByteArray 和 ByteArrayVarint 已经进入 quick-cocos2d-x 的 framework. 许多 Actionscript 程序员已经从 Flash 转到 Cocos2d-x 了。那么以前的那些超级好用的类库都不见了,只好重新来过。 我利用 Lua 和 lpack 库实现了一套 lua版本的 By
2014-01-10更新: ByteArray 和 ByteArrayVarint 已经进入 quick-cocos2d-x 的 framework.


许多 Actionscript 程序员已经从 Flash 转到 Cocos2d-x 了。那么以前的那些超级好用的类库都不见了,只好重新来过。

我利用 Lua 和 lpack 库实现了一套 lua版本的 ByteArray 。这套库用于 quick-cocos2d-x(后称quick) 中。因此依赖一些 quick 中已经包含的c库和lua库 。

主要依赖如下:

  • lpack (已经包含在quick中)
  • BitOp (已经包含在quick中)
  • quick framework

utils.ByteArray

ByteArray依赖 lpack 。

lpack 其实已经足够好用了。但是由于lpack的指针功能有限,所以使用起来还是有些麻烦。这个类模仿了 Actionscript 的 flash.utils.ByteArray ,指针在内部实现,方便读取和缓存 socket 服务器数据。

当然了,有一点点不同,但或许更好用。

下面是使用ByteArray的例子:

下面就是效果了:

luabytearray

utils.ByteArrayVarint

ByteArrayVarint 继承 ByteArray,同时依赖 BitOp。

ByteArrayVarint 实现了 google protocol buffer协议中的Varint编码 。

Protocol Buffer协议是何方神圣,google一下就知道。简单说就是能大幅降低 socket 协议中传递的字节流的长度。但是protocol buffer协议还包含许多东西,而我只需要 varint 编码而已。

我们的上一个游戏就在 AS3中实现了varint编码 。现在又用lua实现了一遍。

方法名称 说明
ByteArrayVarint.readUVInt() read a unsigned varint int
ByteArrayVarint.writeUVInt() write a unsigned varint int
ByteArrayVarint.readVInt() read varint int
ByteArrayVarint.writeVInt() write varint int
ByteArrayVarint.readStringUVInt() read a string preceding a unsigned varint int
ByteArrayVarint.writeStringUVInt() write a string preceding a unsigned varint int

虽然lua支持64位数字,但由于 BitOp 仅支持32位有符号整数,这个 ByteArrayVarint 类能做的事情有限,甚至比AS3的都要差点(AS3好歹还支持32位无符号整数)。但如果程序中不使用变态的64位(或更高)数字的话,还是挺好的。

我会把常用的 lua 功能写出来整合在这个库里并开源,就像我的 as3库 和 java库 一样。


本文链接:http://zengrong.net/post/1968.htm

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读