收藏
回答

readFileSync encoding应该传什么才能读ArrayBuffer?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小游戏 Bug FileSystemManager.readFileSync 微信iOS客户端 8.0.50 3.7.3

想通过FileSystemManager.readFileSync去读一个二进制文件,看到文档中反馈如果不传encoding会以arraybuffer返回。但是测试下来如果不传则会返回空。但是如果传了'binary',又返回是字符串类型。请问,readFileSync这个API什么情况下才会返回二进制?测试代码如下:

    const ab = new ArrayBuffer(1024)
    ab[0] = 0x1;
    var fs = wx.getFileSystemManager();
    var filePath =  `${wx.env.USER_DATA_PATH}/hello.bin`
    const fd = fs.openSync({
      filePath: filePath,
      flag: 'w'
    })
    const wres = fs.writeSync({
      fd: fd,
      data: ab,
      encoding: 'binary'
    })

    console.log("readFileSync success Begin")
    var readResult = fs.readFileSync(filePath)
    console.log(Object.prototype.toString.call(readResult));
    console.log(JSON.stringify(readResult));
    console.log("readFileSync success end")

    fs.readFile({
          filePath : filePath,
          encoding : 'binary',
          complete : (res) => {
            console.log(Object.prototype.toString.call(res.data));
            console.log(JSON.stringify(res));
            console.log("readFile complete end")
          }
     })

如上图,第一个函数没有传encoding类型,直接返回空,也确实是ArrayBuffer类型。第二个函数传了,但是直接返回字符串。

回答关注问题邀请回答
收藏
登录 后发表内容