cocos creator版本 : 1.8.1
我们需要使用自定义的二进制文件数据,加入到resources后预览网页,使用wireshark抓包,发现传输的是 “application/octet-stream”类型的资源,并且size是正确的,但是下载下来后,在代码里面使用console.log(binData.length);打印size,发现比实际的要小,肯定有问题。
我在引擎代码binary-downloader.js里面看到一些代码,不知道是不是有关系:
function downloadBinary (url, callback) 里面:
if (xhr.overrideMimeType) xhr.overrideMimeType(‘text/plain; charset=x-user-defined’);
xhr.onload = function () {
if (xhr.readyState === 4 && (xhr.status === 200 || (CC_TEST && xhr.status === 0))) {
callback(null, self._str2Uint8Array(xhr.responseText));
}
else {
callback(errInfo);
}
};
这儿把下载的content的type设置为了text/plain,然后使用_str2Uint8Array去将编码作为二进制值转出。
function _str2Uint8Array (strData) {
if (!strData)
return null;
var arrData = new Uint8Array(strData.length);
for (var i = 0; i < strData.length; i++) {
arrData[i] = strData.charCodeAt(i) & 0xff;
}
return arrData;
}
最终得到一个Uint8Array。
这里将application/octet-stream当成’text/plain去处理不知道是不是有问题,反正结果是返回的资源的长度不对。
我的需求就是能读取到二进制文件的正确内容,我想这个应该是做游戏很正常的需求,毕竟网络传输用文本数据比较费(即便是压缩了)。请指点现在引擎能否完成这个需求?谢谢!