91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在node.js中使用stream模塊

發布時間:2021-03-18 16:12:42 來源:億速云 閱讀:128 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關怎么在node.js中使用stream模塊,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、實現自定義的可讀流

實現可讀流需繼承 stream.Readable,并實現 readable._read() 方法。

下面的代碼我們實現了一個從數組中讀取數據的流

const {Readable} = require('stream');
//這里我們自定義了一個用來讀取數組的流
class ArrRead extends Readable {
  constructor(arr, opt) {
    //注意這里,需調用父類的構造函數
    super(opt);
    this.arr = arr;
    this.index = 0;
  }
  //實現 _read() 方法
  _read(size) {
    //如果當前下標等于數組長度,說明數據已經讀完
    if (this.index == this.arr.length) {
      this.push(null);
    } else {
      this.arr.slice(this.index, this.index + size).forEach((value) => {
        this.push(value.toString());
      });
      this.index += size;
    }
  }
}
let arr = new ArrRead([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], {
  highWaterMark: 2
});
//這樣當我們監聽 'data' 事件時,流會調用我們實現的 _read() 方法往緩沖區中讀取數據
//然后提供給消費者
arr.on('data', function (data) {
  console.log(data.toString());
});

二、實現自定義的可寫流

實現可寫流必須繼承 stream.Writeable ,并實現 writeable._write() 方法。writable._writev() 方法是可選的。

const {Writable} = require('stream');
//這里我們自定義了一個用來寫入數組的流
class ArrWrite extends Writable {
  constructor(arr, opt) {
    super(opt);
    this.arr = arr;
  }
  //實現 _write() 方法
  _write(chunk, encoding, callback) {
    this.arr.push(chunk.toString());
    callback();
  }
}
let data = [];
let arr = new ArrWrite(data, {
  highWaterMark: 3
});
arr.write('1');
arr.write('2');
arr.write('3');
console.log(data);

三、實現自定義的可讀可寫流

可讀可寫流必須繼承 stream.Duplex,并實現 readable._read() 和 writable._write() 方法。

const {Duplex} = require('stream');
//這里我們自定義了一個用來寫讀可寫數組的流
class ArrReadWrite extends Duplex {
  constructor(arr, opt) {
    super(opt);
    this.arr = arr;
    this.index = 0;
  }
  //實現 _write() 方法
  _write(chunk, encoding, callback) {
    this.arr.push(chunk.toString());
    callback();
  }
  //實現 _read() 方法
  _read(size) {
    //如果當前下標等于數組長度,說明數據已經讀完
    if (this.index == this.arr.length) {
      this.push(null);
    } else {
      this.arr.slice(this.index, this.index + size).forEach((value) => {
        this.push(value.toString());
      });
      this.index += size;
    }
  }
}
let data = [];
let arrWR = new ArrReadWrite(data, {
  highWaterMark: 3
});
//往流中寫入數據
arrWR.write('1');
arrWR.write('2');
arrWR.write('3');
console.log(data);
//往流中讀取數據
console.log(arrWR.read(2).toString());
console.log(arrWR.read(2).toString());

四、自定義的轉換流

轉換流必須繼承 stream.Transform,需實現 transform._transform() 方法。

const {Transform} = require('stream');
//這里我們自定義了一個用來轉換數組的流
class Trans extends Transform {
  constructor(opt) {
    super(opt);
  }
  _transform(chunk, encoding, callback) {
    //將轉換后的數據輸出到可讀流
    this.push(chunk.toString().toUpperCase());
    //參數一是Error對象
    //參數二如果傳入,會被轉發到 readable.push()
    callback();
  }
}
let t = new Trans({
  highWaterMark: 3
});
t.on('data', function (data) {
  console.log(data.toString());
});
t.write('a');
t.write('b');
t.write('c');

轉換流就是將讀取到的數據做些計算然后輸出。轉換流既可以作為可讀流,又可以作為可寫流。

const {Transform} = require('stream');
//這里我們自定義了一個用來轉換數組的流
class Trans extends Transform {
  constructor(opt) {
    super(opt);
  }
  _transform(chunk, encoding, callback) {
    //將轉換后的數據輸出到可讀流
    this.push(chunk.toString().toUpperCase());
    //參數一是Error對象
    //參數二如果傳入,會被轉發到 readable.push()
    callback();
  }
}
let t = new Trans({
  highWaterMark: 3
});
t.on('data', function (data) {
  console.log('data', data.toString());
});
//stdin.pipe(t) 表示將我們的標準輸入寫入到我的轉換流 t 中,此時 t 是可寫流。
//pipe(process.stdout) 表示將轉換流 t 中的數據讀取到標準輸出中,此時 t 是可讀流。
process.stdin.pipe(t).pipe(process.stdout);

上述就是小編為大家分享的怎么在node.js中使用stream模塊了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永济市| 徐水县| 若尔盖县| 连云港市| 延寿县| 苏尼特左旗| 同江市| 台湾省| 青神县| 利辛县| 中宁县| 东莞市| 和硕县| 蓬莱市| 玉溪市| 江阴市| 夏邑县| 米泉市| 龙胜| 磐石市| 淳安县| 郯城县| 弥渡县| 拉萨市| 镇坪县| 玛纳斯县| 兴隆县| 古交市| 长子县| 苗栗市| 高要市| 通河县| 吴旗县| 炎陵县| 东乡县| 保亭| 五大连池市| 延吉市| 兴城市| 珠海市| 基隆市|