FileSystemSyncAccessHandle:read() 方法

基线 2023

新可用

2023 年 3 月起,此功能可在最新的设备和浏览器版本中使用。此功能可能无法在旧版设备或浏览器中使用。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中。

注意:此功能仅在专用 Web 工作线程中可用。

read() 方法是 FileSystemSyncAccessHandle 接口的方法,用于将与句柄关联的文件内容读取到指定的缓冲区中,可以选择在给定的偏移量处读取。

语法

js
read(buffer, options)

参数

buffer

一个 ArrayBufferArrayBufferView(例如 DataView),表示应将文件内容读取到的缓冲区。请注意,您不能直接操作 ArrayBuffer 的内容。而是,您创建一个像 Int8ArrayDataView 这样的类型化数组对象,它以特定格式表示缓冲区,并使用它来读取和写入缓冲区的内容。

options 可选

一个包含以下属性的选项对象

at

表示应从该偏移量(以字节为单位)开始读取文件的数字。

返回值

表示从文件中读取的字节数的数字。

异常

InvalidStateError DOMException

如果关联的访问句柄已关闭,则抛出此异常。

TypeError

如果底层文件系统不支持从指定文件偏移量读取文件,则抛出此异常。

示例

以下异步事件处理程序函数包含在 Web 工作线程中。在从主线程接收消息后,它

  • 创建一个同步文件访问句柄。
  • 获取文件的大小并创建一个 ArrayBuffer 来包含它。
  • 将文件内容读取到缓冲区中。
  • 对消息进行编码并将其写入文件的末尾。
  • 将更改持久化到磁盘并关闭访问句柄。
js
onmessage = async (e) => {
  // Retrieve message sent to work from main script
  const message = e.data;

  // Get handle to draft file
  const root = await navigator.storage.getDirectory();
  const draftHandle = await root.getFileHandle("draft.txt", { create: true });
  // Get sync access handle
  const accessHandle = await draftHandle.createSyncAccessHandle();

  // Get size of the file.
  const fileSize = accessHandle.getSize();
  // Read file content to a buffer.
  const buffer = new DataView(new ArrayBuffer(fileSize));
  const readBuffer = accessHandle.read(buffer, { at: 0 });

  // Write the message to the end of the file.
  const encoder = new TextEncoder();
  const encodedMessage = encoder.encode(message);
  const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });

  // Persist changes to disk.
  accessHandle.flush();

  // Always close FileSystemSyncAccessHandle if done.
  accessHandle.close();
};

注意:在早期版本的规范中,close()flush()getSize()truncate() 被错误地指定为异步方法,并且某些浏览器的旧版本以这种方式实现它们。但是,所有当前支持这些方法的浏览器都将它们实现为同步方法。

规范

规范
文件系统标准
# api-filesystemsyncaccesshandle-read

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅