lua 中string.char字节流的处理

在lua中,如果是使用http来请求的是字节流的数据

那么在cocos2dx v3.3中 需要使用xmlhttprequest这个类

在处理获取的字节流数据时,首先需要转化字节流为字符串,转换的方法是:string.char

   local response = xhr.response         -- 获得返回数据

for i = 1,size do
             byteData = byteData..string.char(response[i])
        end

 

这个办法的特点是一个字符一个字符的处理。还有一个批量处理的方法。那就是使用unpack方法。

 

local response = xhr.response         -- 获得返回数据

        byteData = byteData..string.char( unpack(response))

这种批量处理的方式的好处是,能够批量处理,速度较快。

       但是这样处理还有一个缺点,那就是看网上说一次最大只能处理10k的数据,也就是长度为10000个字节的数据

       而且在我的游戏这种长度是不够的,我需要处理的是40000左右字节的数据

      苦思冥想之后,想到的办法是:首先把response的数据分块,分块之后,对每一块进行转化成数据,然后在合成一个完整的字符串。

在这个过程中,一定要注意数据的完整性。

     

下面这段代码是分成10块进行分别处理的

local part = 10
        local partData = ""
        local startIndex = 1
        local partIndex,endIndex1 = math.modf(size/part)
        local endIndex = partIndex
        print(" endIndex is "..endIndex)
        print(" endIndex1 is "..endIndex1)


        for i=1,part do        
            local partUnPack = string.char(unpack(response,startIndex,endIndex)) 
            startIndex = startIndex + partIndex
            endIndex = endIndex + partIndex
            partData = partData..partUnPack
            print(" startIndex is "..startIndex)
            print(" 解码 i is "..i.." time is "..os.time())
        end


        local rest = size % part  --求余数
        -- print(" rest is "..rest)  
        -- print("startIndex is "..startIndex)
        local restData = ""
        for i=1,rest do
            restData = restData..string.char(response[startIndex+i-1])
        end
        -- print("the  datalen is "..(startIndex+rest).." the size is "..size)
        -- print("restData "..restData)
        partData = partData..restData


     partData的数据就是最后的结果。

      性能分析:

     在windows上面,40000字节的数据需要5秒的时间,而使用unpack之后,就几乎不需要时间。顺利通过了。





        

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值