类:ReadableStreamBYOBReader


\Class: ReadableStreamBYOBReader

版本历史
版本变更
v18.0.0

这个类现在暴露在全局对象上。

v16.5.0

新增于: v16.5.0

ReadableStreamBYOBReader 是面向字节的 <ReadableStream> 的替代消费者(在创建 ReadableStream 时将 underlyingSource.type 设置为 'bytes')。

\The ReadableStreamBYOBReader is an alternative consumer for byte-oriented <ReadableStream> (those that are created with underlyingSource.type set equal to 'bytes' when the ReadableStream was created).

BYOB 是 "带上你自己的缓冲区" 的缩写。这是一种模式,可以更有效地读取面向字节的数据,避免多余的复制。

\The BYOB is short for "bring your own buffer". This is a pattern that allows for more efficient reading of byte-oriented data that avoids extraneous copying.

import {
 open,
} from 'node:fs/promises';
import {
 ReadableStream,
} from 'node:stream/web';
import { Buffer } from 'node:buffer';
class Source {
 type = 'bytes';
 autoAllocateChunkSize = 1024;
 async start(controller) {
 this.file = await open(new URL(import.meta.url));
 this.controller = controller;
 }
 async pull(controller) {
 const view = controller.byobRequest?.view;
 const {
 bytesRead,
 } = await this.file.read({
 buffer: view,
 offset: view.byteOffset,
 length: view.byteLength,
 });
 if (bytesRead === 0) {
 await this.file.close();
 this.controller.close();
 }
 controller.byobRequest.respond(bytesRead);
 }
}
const stream = new ReadableStream(new Source());
async function read(stream) {
 const reader = stream.getReader({ mode: 'byob' });
 const chunks = [];
 let result;
 do {
 result = await reader.read(Buffer.alloc(100));
 if (result.value !== undefined)
 chunks.push(Buffer.from(result.value));
 } while (!result.done);
 return Buffer.concat(chunks);
}
const data = await read(stream);
console.log(Buffer.from(data).toString()); 

AltStyle によって変換されたページ (->オリジナル) /