注册 登录
主题 : 在使用ByteArray:getPack() 是出现错误
级别: 新手上路
UID: 39616
精华: 0
发帖: 16
可可豆: 124 CB
威望: 124 点
在线时间: 150(时)
注册时间: 2010-11-25
最后登录: 2016-03-27
0 楼:  发表于: 2014-07-08 15:47    发自: Web Page
来源于 技术疑问 分类

在使用ByteArray:getPack() 是出现错误   

[string "framework.cc.utils.ByteArray"]:0: too many results to unpack


stack traceback:
[C]: in function 'unpack'
[string "framework.cc.utils.ByteArray"]: in function 'getPack'
[string "Network.lua"]:53: in function 'send2Socket'


求教 我的pack比较大
输出的时候有提示:log too long, max size is 16.00KB, actual size is 112.76KB

级别: 骑士
状态: 连续签到 - [67天]
UID: 316527
精华: 0
发帖: 312
可可豆: 692 CB
威望: 558 点
在线时间: 353(时)
注册时间: 2014-05-19
最后登录: 2016-09-08
1 楼:  发表于: 2014-07-08 15:58    发自: Web Page
输出的时候有提示:log too long, max size is 16.00KB, actual size is 112.76KB

这已经很明确了吧。


级别: 新手上路
UID: 39616
精华: 0
发帖: 16
可可豆: 124 CB
威望: 124 点
在线时间: 150(时)
注册时间: 2010-11-25
最后登录: 2016-03-27
2 楼:  发表于: 2014-07-08 15:59    发自: Web Page
回 1楼(微微蓝) 的帖子
不能发送大数据吗
级别: 侠客

UID: 265116
精华: 3
发帖: 136
可可豆: 349 CB
威望: 268 点
在线时间: 67(时)
注册时间: 2013-10-11
最后登录: 2015-04-07
3 楼:  发表于: 2014-07-08 16:17    发自: Web Page
这个类是为socket通信设计的,我从来就没有考虑用它发送过大数据。

我们的游戏中,每条数据是用字节做单位的,最大也不会超过10K。100K以上的数据我实在是没有考虑过。

以前有网友提到用 ByteArray:toString() 来显示几百K的数据,说player会崩溃。这个我只能说,这么大的数据量print出来,作为人类的我很难看懂。
http://zengrong.net

注册的时候手抖(jian)少输入一个字母,所以就这样了……
级别: 侠客

UID: 265116
精华: 3
发帖: 136
可可豆: 349 CB
威望: 268 点
在线时间: 67(时)
注册时间: 2013-10-11
最后登录: 2015-04-07
4 楼:  发表于: 2014-07-08 16:18    发自: Web Page
回 楼主(chayic) 的帖子
这个错误并非 ByteArray 报的,而是lpack这个库报的。这是个C库。
http://zengrong.net

注册的时候手抖(jian)少输入一个字母,所以就这样了……
级别: 新手上路
UID: 39616
精华: 0
发帖: 16
可可豆: 124 CB
威望: 124 点
在线时间: 150(时)
注册时间: 2010-11-25
最后登录: 2016-03-27
5 楼:  发表于: 2014-07-08 16:23    发自: Web Page
回 4楼(zong) 的帖子
哈哈 看来我想办法 分包或者 优化一下包的大小吧
级别: 新手上路
UID: 39616
精华: 0
发帖: 16
可可豆: 124 CB
威望: 124 点
在线时间: 150(时)
注册时间: 2010-11-25
最后登录: 2016-03-27
6 楼:  发表于: 2014-07-08 17:23    发自: Web Page
function ByteArray:getPack(__offset, __length)
    __offset = __offset or 1
    __length = __length or #self._buf
    local __t = {}
    for i=__offset,__length do
        __t[#__t+1] = string.byte(self._buf)
    end
    local __fmt = self:_getLC("b"..#__t)
    print("fmt:", __fmt)
    local __s = string.pack(__fmt, unpack(__t))
    return __s
end

我定位到这里 可以正常拿到__t 他是一个序列化的数组,只是有4w多个数据  unpack的时候 报错

级别: 新手上路
UID: 39616
精华: 0
发帖: 16
可可豆: 124 CB
威望: 124 点
在线时间: 150(时)
注册时间: 2010-11-25
最后登录: 2016-03-27
7 楼:  发表于: 2014-07-08 18:10    发自: Web Page
ok 解决了 谢谢大家
级别: 侠客

UID: 265116
精华: 3
发帖: 136
可可豆: 349 CB
威望: 268 点
在线时间: 67(时)
注册时间: 2013-10-11
最后登录: 2015-04-07
8 楼:  发表于: 2014-07-08 18:40    发自: Web Page
回 6楼(chayic) 的帖子
我详细测一下提个pr
http://zengrong.net

注册的时候手抖(jian)少输入一个字母,所以就这样了……
级别: 新手上路
UID: 54763
精华: 0
发帖: 33
可可豆: 78 CB
威望: 78 点
在线时间: 445(时)
注册时间: 2011-03-04
最后登录: 2018-01-26
9 楼:  发表于: 2014-08-25 10:09    发自: Web Page
回 7楼(chayic) 的帖子
请问你是怎么解决的?分包了?

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部