HarmonyOS 读取raw文件参考示例?

如题:HarmonyOS 读取raw文件参考示例?

阅读 608
1 个回答
// 这里使用getRawFileContent的方式读取测试文本,并将文本内容打印出来
async loadFromRawFile(context: Context, rawFileName: string): void {
  let rawFileRes: Uint8Array = await context.resourceManager.getRawFileContent(rawFileName);
  let bufferLike: ArrayBufferLike = rawFileRes.buffer;
  let rawFileBuffer: ArrayBuffer = bufferLike.slice(0, bufferLike.byteLength);
  log.info('loadFromRawFile: ' + rawFileBuffer.byteLength);
  const decoder = util.TextDecoder.create('"utf-8"');
  const str = decoder.decodeWithStream(new Uint8Array(rawFileBuffer));
  log.info('loadFromRawFile ' + str);
}
loadRawFd(context: Context, rawFileName: string) {
  context.resourceManager.getRawFd(rawFileName, (err: BusinessError, value: resourceManager.RawFileDescriptor) => {
    let fd = value.fd;
    let offset = value.offset;
    let fdLength = value.length;
    log.info('fd: ' + value.fd + ', offset: ' + offset + ', length: ' + fdLength);
    let stream: fs.Stream = fs.fdopenStreamSync(fd, 'r');

    let stringBuffer = new ArrayBuffer(128); // 每次默认只装128个长度
    let currentLength = 0; // 当前已读取长度
    let readLength = 128; // 每次读取长度,默认128的长度
    while (currentLength < fdLength) {
      readLength = (fdLength - currentLength > 128) ? 128 : (fdLength - currentLength)
      stringBuffer = new ArrayBuffer(readLength);
      stream.readSync(stringBuffer, { offset: offset + currentLength, length: readLength });
      let decoder = util.TextDecoder.create('"utf-8"');
      let str = decoder.decodeWithStream(new Uint8Array(stringBuffer));
      log.info(str); // 解析成字符串并打印出日志
      currentLength += readLength; // 读取起始点
    }

    context.resourceManager.closeRawFdSync(rawFileName); // 文件读取完后,需要使用该接口将FD关掉
    // fs.closeSync(fd); // 不使用该API,已给研发提诉求优化指导。
    stream.closeSync();
  })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进