ReadableStreamBYOBReader

O ReadableStreamBYOBReader da Stream APIs descreve um leitor para uma ReadableStream que facilita uma leitura zero-copy de uma fonte de bytes. É utilizado para transferências eficientes de dados de fontes que apresentam uma série de bytes anônimos como dados, como arquivos.

Nesse contexto, o termo BYOB significa “Traga o seu próprio buffer”.

ReadableStreamBYOBReader() Cria e retorna uma instância de um objeto ReadableStramBYOBReader.

ReadableStreamBYOBReader.closed Retorna uma Promise que se realiza quando a stream fechar, ou rejeita caso a stream retorne um erro ou o lock do reader é ativado. Essa propriedade habilita a produção de códigos que respondem a um ponta do processo de streaming.

ReadableStreamBYOBReader.cancel() Retorna uma Promise que se realiza quando uma stream é cancelada. Quando esse método é chamado, sinaliza que o consumidor perdeu o interesse na stream. O motivo será retornado para a origem.

ReadableStreamBYOBReader.read() Passa uma view que deve conter os dados, e retorna uma Promise que se realiza com o próximo conteúdo na stream, ou retorna uma rejeição com um indicativo que a stream foi fechada ou retornou um erro.

ReadableStreamBYOBReader.releaseLock() Libera o processamento de leitura da stream.

Crie um reader usando ReadableStream.getReader() na stream, especificando o modo byob nas opções de parâmetro.

const reader = stream.getReader({ mode: "byob" });
let buffer = new ArrayBuffer(4000);

Uma função que utiliza o reader é apresentada abaixo.

readStream(reader);
function readStream(reader) {
let bytesReceived = 0;
let offset = 0;
while (offset < buffer.byteLength) {
// read() retorna uma promise que se realiza quando um valor é recebido
reader.read(new Uint8Array(buffer, offset, buffer.byteLength - offset))
.then(function processBytes({ done, value }) {
// Result objects :
// done - true se a stream já tiver passado todos os dados
// value - alguma informação. Sempre undefined, caso done for verdadeiro.
if (done) {
// Não há mais dados na stream
return;
}
buffer = value.buffer;
offset += value.byteLength;
bytesReceived += value.byteLength;
// Lê mais dados e chama a função novamente
return reader.read(new Uint8Array(buffer, offset, buffer.byteLength - offset)).then(processBytes);
});
}
}

Para mais informações sobre ReadableStreamBYOBReader visite MDN Web Docs.


Contribuidores