H5如何读取二进制文件?

楼主最后是怎么解决的啊,小白一枚,求指教

我就不明白了,难道引擎组的老大都认为游戏不需要读自定义格式的文件,难道都是如他们所想的使用文本文件
一个简单的读文件的api都做得不理想,还谈何做引擎 ?!
看看unity的读文件的api,看看人家是怎么做的!!!

楼主应该说的是读取放在工程中的二进制文件吧,分享一下我的做法
主要分两步

  1. 获取资源的真实路径,有两种方法

    • 使用 cc.url.raw 获取,推荐这种方法

      // 获取真实路径
      let binaryFile = 'resources/filename'; // 要求必须放在 resources 目录下
      let extensionName = '.bin'; // 后缀名
      let url = cc.url.raw(binaryFile) + extensionName;
      
    • 在组件中定义 cc.Asset 类型资源,把二进制文件拖进去,但是引擎会报警告

      const {ccclass, property} = cc._decorator;
      @ccclass
      export default class YourComponent extends cc.Component {
          @property(cc.Asset)
          binaryAsset: cc.Asset = null;
          onLoad () {
              let url = this.binaryAsset.toString();
          }
      }
      /**
       * 引擎将会警告
       * Please change the definition of property 'aaaaaa' in class 'YourComponent'. Starting from v1.10,
       * properties in CCClass can not be abbreviated if they are of type RawAsset.
      */
      
  2. 使用获取到的真实路径 url 拿到二进制数据,这里也有两种做法

    • 使用 cc.loader.load 获取,这种方法在原生环境和 Web 环境都有效,推荐使用这种方法

      cc.loader.load(
          { url: url, type: 'binary'},
          (err, binaryData: Uint8Array) => {
              if (err) {
                  console.error(err.message || err);
              } else {
                  // todo
              }
          }
      );
      
    • 使用 jsb.fileUtils.getDataFromFile 获取,但只能在原生环境使用

      let binaryData: Uint8Array = jsb.fileUtils.getDataFromFile(url);
      

当然楼上说的,使用 HTTP 请求远程数据也是可以的

2赞

多说一句,这种方法也是看引擎摸索,尝试了一段时间才试出来的,但是如果由引擎提供一种 BinaryAsset 的资源类型,用来保存用户自定义的二进制数据,这当然是最好的

大佬,方法2在浏览器和原生环境中都是可以的,但是到了微信(小游戏)中就不起作用了,是Cocos creator 2.3.2的版本,你试过吗?