บทช่วยสอน Node.js สตรีม (สตรีม) ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ อ่านข้อมูลจากกระแส,กระแสเขียน,การไหลของท่อส่ง,การไหลของห่วงโซ่,
สตรีมเป็นอินเตอร์เฟซนามธรรมโหนดมีวัตถุจำนวนมากใช้อินเตอร์เฟซนี้ ยกตัวอย่างเช่นเซิร์ฟเวอร์ที่ริเริ่มการร้องขอสำหรับการร้องขอ HTTP วัตถุที่เป็นสตรีมเช่นเดียวกับ stdout (ออกมาตรฐาน)
Node.js, สตรีมมีสี่ประเภทของการไหลคือ:
อ่าน - การดำเนินงานที่สามารถอ่านได้
เขียนได้ - เขียนงาน
เพล็กซ์ - การอ่านและเขียน
Transform - ข้อมูลการดำเนินงานที่จะเขียนแล้วอ่านออกผล
วัตถุทั้งหมดอยู่ในกรณีของ EventEmitter สตรีม เหตุการณ์ที่พบบ่อย ได้แก่ :
ข้อมูล - เรียกเมื่ออ่านข้อมูลเวลา
สิ้น - ไม่เรียกข้อมูลที่อ่านได้มากขึ้น
ข้อผิดพลาด - เรียกเมื่อเกิดข้อผิดพลาดในการรับและการเขียน
เสร็จ - ไฟไหม้เมื่อข้อมูลทั้งหมดได้รับการเขียนไปยังระบบพื้นฐาน
กวดวิชานี้จะแนะนำการดำเนินงานกระแสที่พบบ่อย
สร้างไฟล์ input.txt ดังต่อไปนี้:
本教程官网地址:www.w3write.com
สร้างไฟล์ main.js ดังต่อไปนี้:
var fs = require("fs"); var data = ''; // 创建可读流 var readerStream = fs.createReadStream('input.txt'); // 设置编码为 utf8。 readerStream.setEncoding('UTF8'); // 处理流事件 --> data, end, and error readerStream.on('data', function(chunk) { data += chunk; }); readerStream.on('end',function(){ console.log(data); }); readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");
รหัสข้างต้นจะถูกดำเนินการดังต่อไปนี้:
程序执行完毕 本教程官网地址:www.w3write.com
สร้างไฟล์ main.js ดังต่อไปนี้:
var fs = require("fs"); var data = '本教程官网地址:www.w3write.com'; // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream('output.txt'); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> data, end, and error writerStream.on('finish', function() { console.log("写入完成。"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");
ข้อมูลโปรแกรมดังกล่าวข้างต้นจะถูกเขียนไปตัวแปรแฟ้มข้อมูล Output.txt ผลการเรียกใช้โค้ดมีดังนี้
$ node main.js 程序执行完毕 写入完成。
Output.txt ดูเนื้อหาของแฟ้ม:
$ cat output.txt 本教程官网地址:www.w3write.com
ดังแสดงในภาพข้างบนเราเมื่อเทียบกับถังเอกสารเต็มไปด้วยน้ำและน้ำเป็นเนื้อหาของเอกสารเพื่อให้เราเชื่อมต่อสองถังน้ำจากถังลงไปในถังอื่น ๆ ที่มีท่อ (ท่อ) ดังนั้น ช้าตระหนักถึงกระบวนการจำลองไฟล์ที่มีขนาดใหญ่
ตัวอย่างต่อไปนี้เราต้องการที่จะเขียนไปยังแฟ้มอื่นโดยการอ่านเนื้อหาของไฟล์และเนื้อหาที่
การตั้งค่า input.txt เอกสารอ่านดังนี้
本教程官网地址:www.w3write.com 管道流操作实例
สร้างไฟล์ main.js ดังต่อไปนี้:
var fs = require("fs"); // 创建一个可读流 var readerStream = fs.createReadStream('input.txt'); // 创建一个可写流 var writerStream = fs.createWriteStream('output.txt'); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe(writerStream); console.log("程序执行完毕");
ผลการเรียกใช้โค้ดมีดังนี้
$ node main.js 程序执行完毕
Output.txt ดูเนื้อหาของแฟ้ม:
$ cat output.txt 本教程官网地址:www.w3write.com 管道流操作实例
เชนเป็นอีกหนึ่งกระแสที่ไหลและสร้างหลายกระแสห่วงโซ่กลไกการดำเนินงานโดยการเชื่อมต่อการส่งออก กระแสห่วงโซ่ใช้โดยทั่วไปสำหรับการดำเนินงานท่อ
ต่อไปเรามีท่อและห่วงโซ่การบีบอัดและขยายไฟล์
สร้างไฟล์ compress.js ดังต่อไปนี้:
var fs = require("fs"); var zlib = require('zlib'); // 压缩 input.txt 文件为 input.txt.gz fs.createReadStream('input.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz')); console.log("文件压缩完成。");
ผลการเรียกใช้โค้ดมีดังนี้
$ node compress.js 文件压缩完成。
หลังจากการดำเนินการดำเนินการข้างต้นเราจะเห็นไดเรกทอรีปัจจุบันสร้างขึ้นภายใต้การบีบอัดไฟล์ input.txt input.txt.gz
ถัดไปให้แกะไฟล์สร้างไฟล์ decompress.js ดังต่อไปนี้:
var fs = require("fs"); var zlib = require('zlib'); // 解压 input.txt.gz 文件为 input.txt fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt')); console.log("文件解压完成。");
ผลการเรียกใช้โค้ดมีดังนี้
$ node decompress.js 文件解压完成。