類:ReadableStreamBYOBReader
曆史
版本 | 變化 |
---|---|
v18.0.0 | 這個類現在暴露在全局對象上。 |
v16.5.0 | 添加於:v16.5.0 |
ReadableStreamBYOBReader
是麵向字節的 <ReadableStream> 的替代消費者(在創建 ReadableStream
時將 underlyingSource.type
設置為等於 'bytes'
的消費者)。
BYOB
是“自帶緩衝區”的縮寫。這是一種模式,可以更有效地讀取麵向字節的數據,從而避免多餘的複製。
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());
相關用法
- Node.js ReadableStream.getReader([options])用法及代碼示例
- Node.js ReadableStream.values([options])用法及代碼示例
- Node.js ReadableStream.pipeThrough(transform[, options])用法及代碼示例
- Node.js Readable Stream data事件用法及代碼示例
- Node.js Readable Stream pause事件用法及代碼示例
- Node.js Readable Stream readable事件用法及代碼示例
- Node.js Readable Stream close事件用法及代碼示例
- Node.js Readable Stream error事件用法及代碼示例
- Node.js Readable Stream end事件用法及代碼示例
- Node.js Readable Stream resume事件用法及代碼示例
- Node.js ReferenceError用法及代碼示例
- Node.js REPLServer.defineCommand(keyword, cmd)用法及代碼示例
- Node.js RangeError用法及代碼示例
- Node.js REPLServer用法及代碼示例
- Node.js ServerHttp2Stream http2stream.pushStream(headers[, options], callback)用法及代碼示例
- Node.js http2.Http2ServerRequest request.url用法及代碼示例
- Node.js request.socket用法及代碼示例
- Node.js assert.notEqual(actual, expected[, message])用法及代碼示例
- Node.js tlsSocket.authorized用法及代碼示例
- Node.js zlib.deflateRaw()用法及代碼示例
- Node.js http.IncomingMessage message.rawHeaders用法及代碼示例
- Node.js Console用法及代碼示例
- Node.js GM transparent()用法及代碼示例
- Node.js URL.protocol用法及代碼示例
- Node.js http.Agent.reuseSocket(socket, request)用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 ReadableStreamBYOBReader。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。