當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js new stream.Duplex(options)用法及代碼示例


new stream.Duplex(options)

曆史
版本變化
v8.4.0

現在支持 readableHighWaterMarkwritableHighWaterMark 選項。


參數
  • options <Object>傳給雙方WritableReadable構造函數。還具有以下字段:
    • allowHalfOpen <boolean> 如果設置為 false ,則當可讀端結束時,流將自動結束可寫端。 默認: true
    • readable <boolean> 設置Duplex 是否可讀。 默認: true
    • writable <boolean> 設置Duplex 是否應可寫。 默認: true
    • readableObjectMode <boolean> 為流的可讀端設置objectMode。如果 objectModetrue 則無效。 默認: false
    • writableObjectMode <boolean>objectMode 設置為流的可寫側。如果 objectModetrue 則無效。 默認: false
    • readableHighWaterMark <number> 為流的可讀端設置highWaterMark。如果提供了highWaterMark,則無效。
    • writableHighWaterMark <number> 為流的可寫端設置highWaterMark。如果提供了highWaterMark,則無效。
const { Duplex } = require('node:stream');

class MyDuplex extends Duplex {
  constructor(options) {
    super(options);
    // ...
  }
}

或者,當使用 pre-ES6 風格的構造函數時:

const { Duplex } = require('node:stream');
const util = require('node:util');

function MyDuplex(options) {
  if (!(this instanceof MyDuplex))
    return new MyDuplex(options);
  Duplex.call(this, options);
}
util.inherits(MyDuplex, Duplex);

或者,使用簡化的構造方法:

const { Duplex } = require('node:stream');

const myDuplex = new Duplex({
  read(size) {
    // ...
  },
  write(chunk, encoding, callback) {
    // ...
  }
});

使用管道時:

const { Transform, pipeline } = require('node:stream');
const fs = require('node:fs');

pipeline(
  fs.createReadStream('object.json')
    .setEncoding('utf8'),
  new Transform({
    decodeStrings: false, // Accept string input rather than Buffers
    construct(callback) {
      this.data = '';
      callback();
    },
    transform(chunk, encoding, callback) {
      this.data += chunk;
      callback();
    },
    flush(callback) {
      try {
        // Make sure is valid json.
        JSON.parse(this.data);
        this.push(this.data);
        callback();
      } catch (err) {
        callback(err);
      }
    }
  }),
  fs.createWriteStream('valid-object.json'),
  (err) => {
    if (err) {
      console.error('failed', err);
    } else {
      console.log('completed');
    }
  }
);

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 new stream.Duplex(options)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。