cocos creator http 收protobuf数据 decode index out of range

问题

被一个傻逼的问题搞了两天,也是醉了。http接收后台的pb数据,decode总是解不开,老提示类似

index out of range: 90 + 10 > 90

的错误,因为http收的时候收的是string类型的数据,然后就老是想怎么把string转成 uint8Array,同时有中文或者特殊字符的时候也要能正确的解析。苦苦求索不得法,其实是思路完全错了。怎么就不能直接收一个二进制的buffer呢?

解决

其实很简单,就是 接收二进制数据

var xhr = new XMLHttpRequest();
xhr.open(
    /* method */ "GET",
    /* file */ "/path/to/encodedSomeMessageData.bin",
    /* async */ true
);
xhr.responseType = "arraybuffer";
xhr.onload = function(evt) {
    var msg = SomeMessage.decode(new Uint8Array(xhr.response));
    alert(JSON.stringify(msg, null, 4)); // Correctly decoded
}
xhr.send(null);

重点
发请求之前

xhr.responseType = ‘arrayBuffer’

收包的时候

xhr.response

然后完美解析!

你可能感兴趣的:(cocos creator http 收protobuf数据 decode index out of range)