← Cloudflare Workers / workers / runtime-apis / streams
ReadableStream BYOBReader
Контекст
BYOB является сокращением от bring your own buffer (используйте собственный буфер). ReadableStreamBYOBReader позволяет читать данные напрямую в буфер, предоставленный разработчиком, что сводит копирование к минимуму.
Экземпляр ReadableStreamBYOBReader функционально идентичен ReadableStreamDefaultReader за исключением read метод.
A ReadableStreamBYOBReader не создается через свой конструктор. Вместо этого он получается из ReadableStream:
const { readable, writable } = new TransformStream();
const reader = readable.getReader({ mode: 'byob' });Методы
-
read(bufferArrayBufferView): Promise<ReadableStreamBYOBReadResult>- Возвращает Promise со следующим доступным фрагментом данных, считанным в переданный буфер.
-
readAtLeast(minElements, bufferArrayBufferView): Promise<ReadableStreamBYOBReadResult>-
Возвращает Promise со следующим доступным фрагментом данных, считанным в переданный буфер. Promise не будет разрешён, пока не наберётся хотя бы
minElementsэлементов было прочитано. Размер элемента определяетсяbufferArrayBufferView, например 4 байта на элемент дляUint32Array. Однако менееminElementsэлементов может быть возвращено меньше, если достигнут конец потока или базовый поток закрыт. А именно:- Если
minElementsили более элементов, промис разрешается с{ value: <buffer view sized to bytes read>, done: false }. - Если поток завершается после того, как было прочитано некоторое количество данных, но меньше, чем
minElementsэлементов, промис разрешается с частичными данными:{ value: <buffer view sized to bytes actually read>, done: false }. Следующий вызовreadилиreadAtLeastзатем вернёт{ value: undefined, done: true }. - Если поток завершается с нулевым количеством доступных байтов (то есть поток уже достиг EOF), промис разрешается со значением
{ value: <zero-length view>, done: true }. - Если в потоке возникает ошибка, промис отклоняется.
minElementsдолжен быть не менее 1, иminElements * elementSizeне должен превышать длину в байтахbufferArrayBufferView, либо promise отклоняется сTypeError. ДляUint8Array, размер элемента равен 1, поэтомуminElementsфактически представляет собой количество байт.
- Если
-