FileSystemSyncAccessHandle: read() method
The read()
method of the FileSystemSyncAccessHandle
interface reads the content of the file associated with the handle into a specified buffer, optionally at a given offset.
Syntax
Parameters
-
buffer
-
An ArrayBuffer
or ArrayBufferView
(such as a DataView
) representing the buffer that the file content should be read into. Note that you cannot directly manipulate the contents of an ArrayBuffer
. Instead, you create one of the typed array objects like an Int8Array
or a DataView
object which represents the buffer in a specific format, and use that to read and write the contents of the buffer.
options
Optional
-
An options object containing the following properties:
-
at
-
A number representing the offset in bytes that the file should be read from.
Return value
A number representing the number of bytes read from the file.
Exceptions
InvalidStateError
DOMException
-
Thrown if the associated access handle is already closed.
Examples
The following asynchronous event handler function is contained inside a Web Worker. On receiving a message from the main thread it:
- Creates a synchronous file access handle.
- Gets the size of the file and creates an
ArrayBuffer
to contain it.
- Reads the file contents into the buffer.
- Encodes the message and writes it to the end of the file.
- Persists the changes to disk and closes the access handle.
onmessage = async (e) => {
const message = e.data;
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
const accessHandle = await draftHandle.createSyncAccessHandle();
const fileSize = accessHandle.getSize();
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
accessHandle.flush();
accessHandle.close();
};
Note: In earlier versions of the spec, close()
, flush()
, getSize()
, and truncate()
were wrongly specified as asynchronous methods, and older versions of some browsers implement them in this way. However, all current browsers that support these methods implement them as synchronous methods.
Specifications
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
read |
102 |
102 |
111 |
No |
88 |
15.2 |
109 |
109 |
111 |
74 |
15.2 |
21.0 |
See also