Node.js - Akışlar

Akışlar nedir?

Akışlar, bir kaynaktan veri okumanıza veya bir hedefe sürekli olarak veri yazmanıza olanak tanıyan nesnelerdir. Node.js'de dört tür akış vardır -

  • Readable - Okuma işlemi için kullanılan akış.

  • Writable - Yazma işlemi için kullanılan akış.

  • Duplex - Hem okuma hem de yazma işlemi için kullanılabilen akış.

  • Transform - Çıkışın girişe göre hesaplandığı bir tür çift yönlü akış.

Her bir Akış türü bir EventEmitterörnek ve farklı zamanlarda birkaç olay atar. Örneğin, yaygın olarak kullanılan olaylardan bazıları şunlardır:

  • data - Bu olay, okunabilecek veri olduğunda tetiklenir.

  • end - Okunacak daha fazla veri kalmadığında bu olay tetiklenir.

  • error - Bu olay, veri alırken veya yazarken herhangi bir hata olduğunda tetiklenir.

  • finish - Bu olay, tüm veriler temeldeki sisteme temizlendiğinde tetiklenir.

Bu eğitici, Akışlarda yaygın olarak kullanılan işlemlerin temel bir anlayışını sağlar.

Bir Akıştan Okuma

Aşağıdaki içeriğe sahip input.txt adlı bir metin dosyası oluşturun -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Aşağıdaki kodla main.js adlı bir js dosyası oluşturun -

var fs = require("fs");
var data = '';

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

// Handle stream events --> 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("Program Ended");

Şimdi sonucu görmek için main.js'yi çalıştırın -

$ node main.js

Çıkışı doğrulayın.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Bir Akışa Yazma

Aşağıdaki kodla main.js adlı bir js dosyası oluşturun -

var fs = require("fs");
var data = 'Simply Easy Learning';

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');

// Mark the end of file
writerStream.end();

// Handle stream events --> finish, and error
writerStream.on('finish', function() {
   console.log("Write completed.");
});

writerStream.on('error', function(err) {
   console.log(err.stack);
});

console.log("Program Ended");

Şimdi sonucu görmek için main.js'yi çalıştırın -

$ node main.js

Çıkışı doğrulayın.

Program Ended
Write completed.

Şimdi mevcut dizininizde oluşturulan output.txt dosyasını açın; aşağıdakileri içermelidir -

Simply Easy Learning

Akışları Borulama

Borulama, bir akışın çıkışını başka bir akıma girdi olarak sağladığımız bir mekanizmadır. Normalde bir akıştan veri almak ve bu akışın çıktısını başka bir akışa geçirmek için kullanılır. Boru işlemlerinde sınır yoktur. Şimdi bir dosyadan okumak ve başka bir dosyaya yazmak için bir boru örneği göstereceğiz.

Aşağıdaki kodla main.js adlı bir js dosyası oluşturun -

var fs = require("fs");

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);

console.log("Program Ended");

Şimdi sonucu görmek için main.js'yi çalıştırın -

$ node main.js

Çıkışı doğrulayın.

Program Ended

Geçerli dizininizde oluşturulan output.txt dosyasını açın; aşağıdakileri içermelidir -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Akışları Zincirlemek

Zincirleme, bir akışın çıktısını başka bir akışa bağlamak ve çoklu akış işlemlerinden oluşan bir zincir oluşturmak için bir mekanizmadır. Normalde boru işlemlerinde kullanılır. Şimdi önce bir dosyayı sıkıştırmak ve sonra aynı sıkıştırmayı açmak için boru ve zincirleme kullanacağız.

Aşağıdaki kodla main.js adlı bir js dosyası oluşturun -

var fs = require("fs");
var zlib = require('zlib');

// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
   .pipe(zlib.createGzip())
   .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("File Compressed.");

Şimdi sonucu görmek için main.js'yi çalıştırın -

$ node main.js

Çıkışı doğrulayın.

File Compressed.

İnput.txt dosyasının sıkıştırılmış olduğunu ve geçerli dizinde input.txt.gz dosyasını oluşturduğunu göreceksiniz. Şimdi aynı dosyayı aşağıdaki kodu kullanarak açmayı deneyelim -

var fs = require("fs");
var zlib = require('zlib');

// Decompress the file input.txt.gz to input.txt
fs.createReadStream('input.txt.gz')
   .pipe(zlib.createGunzip())
   .pipe(fs.createWriteStream('input.txt'));
  
console.log("File Decompressed.");

Şimdi sonucu görmek için main.js'yi çalıştırın -

$ node main.js

Çıkışı doğrulayın.

File Decompressed.