Node.js Stream Çeşitleri: Readable, Writable, Transform ()

Node.js Stream Çeşitleri: Readable, Writable, Transform ()

Nodejs'de stream çeşitleri arasında yer alan Transform stream, verilerin okunması ve yazılması sırasında belirli bir işleme tabi tutulmasını sağlar Bu işlem, verilerin dönüştürülmesi, filtrelenmesi veya özetlenmesi gibi çeşitli amaçlara hizmet edebilir Örneğin, bir Transform stream kullanarak verilerin sıkıştırılması veya şifrelenmesi gibi işlemler yapabilirsiniz
Transform stream, bir Readable stream ile bir Writable stream arasında da çalışabilir Bu sayede, verilerin okunması ve aynı anda işlenerek başka bir stream'e yazılması mümkün olur Bu stream türü, genellikle veri işleme gerektiren durumlarda kullanılır ve Nodejs'deki stream işlemlerinde oldukça önemli bir yer tutar
Nodejs stream çeşitleri arasında yer alan Transform stream, veri aktarımı işlemlerinde oldukça kullanışlıdır Verileri okuyup belirli bir işlemle dönüştürdükten sonra yazmak, stream işlemlerini daha verimli hale

Node.js Stream Çeşitleri: Readable, Writable, Transform ()

Node.js, etkili ve hızlı bir yapılandırma için stream'ler ile tasarlanmıştır. Başka bir deyişle, stream'ler bir veri akışı oluşturur ve bu akışın belli bir noktasındaki veriler işlenebilir. Okumaya, yazmaya ve dönüştürmeye uygun olarak üç farklı stream türü vardır: Readable, Writable ve Transform().

Bir Readable stream, okunabilir verilerin yayınlanmasını ve Writable stream ise yazma işleminin yapılabileceği bir noktada verilerin toplanmasını sağlar. Ayrıca, Transform stream belirli bir işleme tabi tutarak verileri okurken yazmanızı sağlayan bir stream türüdür.

Herhangi bir stream birbiriyle bağlı ve bir birimden diğerine veri akışını yönetir. Node.js'de bu bağlantı, Pipe() fonksiyonu ile yapılır. Ayrıca stream olayları yazma ve okuma işlemlerinde kullanılabilir ve genellikle stream'i daha iyi bir şekilde yönetmek için tercih edilir.

Bu makalede ele alınan stream türleri, kodları daha okunaklı hale getirmeye yardımcı olabilecek araçlardır. Node.js ile ilgili daha fazla bilgi edinmek istiyorsanız okuyabileceğiniz çeşitli kaynaklar bulunmaktadır.


Readable Stream Nedir?

Node.js stream çeşitleri arasında en temel olanlardan biri Readable Stream'dir. Readable Stream, okumaya uygun verilerin yayınlanmasını sağlar. Bu stream türü, dosya aktarımı, HTTP istekleri veya bir veritabanına yapılan sorgular gibi birçok farklı durumda kullanılabilir. Readable Stream, okunacak olan verileri parça parça gönderir ve veri parçası tamponuna sahip olarak kaydeder. Bu sayede, okunacak olan verilerin tümünü belleğe yüklemek yerine, yalnızca okunacak olan parçalar bellekte tutulur.

Aynı zamanda Readable Stream, verilerin nasıl okunacağına dair farklı yöntemler sunar. Bu yöntemler arasında 'data' olayını dinleyerek veya 'pipe' kullanarak verileri okumak yer alır. Data olayı, stream'deki veriler her okunduğunda tetiklenirken, pipe yöntemi ise stream'leri birleştirerek verilerin bir noktadan diğerine akmasını sağlar. Bu sayede, birden fazla stream arasında veri aktarımı yapmak daha kolay hale gelir.

Readable Stream, stream.lenght gibi bazı özelliklere de sahiptir. Bu özellik, stream içindeki verilerin uzunluğunu belirtir. Ayrıca, Readable Stream'in bir diğer özelliği de 'flowing' veya 'paused' olmasıdır. Eğer bir Readable Stream 'paused' durumda ise, veriler yalnızca veri okuma işlemine başlamak için bir komut verildiğinde gönderilir. Diğer yandan, 'flowing' durumunda Readable Stream, verileri akışta tutarak veri okuma işlemine başlamaktadır.

Genel olarak, Readable Stream, okunacak olan verilerin daha verimli ve az bellek tüketerek işlenmesini sağlayan bir stream türüdür. Bu sayede, büyük boyutlu dosyalar gibi yüksek miktarda veri içeren durumlarda bile, programların performansı optimize edilebilir.


Writable Stream Nedir?

Bir Writable stream, verilerin yazılabileceği bir akış noktasıdır. Bu akış noktası, verilerin toplandığı ve hedef yerlerde yazıldığı bir karşılama noktasıdır. Writable stream, Node.js tarafından çıktı yönetimi için yaygın olarak kullanılır ve çok çeşitli senaryolarda kullanılabilir.

Bir Writable stream oluşturmak için, writable() fonksiyonunu kullanabiliriz. Bu fonksiyon, verileri kaydedebilmek için kullanılabilecek bir akış noktası oluşturabilir. Ayrıca, Writable stream'i sağlamak için pipe() yöntemi de tercih edilebilir.

Writable stream'ler, çeşitli yerlerde kullanılabilir. Örneğin, bir dosyaya yazmak, bir web sayfasına yanıt vermek veya bir ağ bağlantısı ile etkileşim kurmak için kullanılabilir. Oluşturulan stream'i kullanmak için genel olarak write() yöntemi tercih edilir.

Bir Writable stream, yazma işleminin yapılabileceği bir noktada verilerin toplanmasını sağlayarak, Node.js aracılığıyla daha verimli bir çıktı yönetimi sağlar. Bu stream türü, kod yazarken performans açısından büyük öneme sahiptir ve Node.js geliştirme sürecinin ayrılmaz bir parçasıdır.


Duplex Stream Nedir?

Duplex stream, Node.js stream türleri arasında en önemli olanıdır. Hem okunabilen hem de yazılabilen bir stream türüdür ve işlevselliği sayesinde çift yönlü veri iletimine izin verir. Bu stream türü, bir dosyayı okuyup aynı zamanda başka bir dosyaya yazmak için kullanılabilir.

Bir Duplex stream, Readable ve Writable stream'den daha karmaşık bir yapıdadır. Verilerin hem okunmasını hem de yazılmasını sağlayan özelliği sayesinde oldukça kullanışlıdır. Bu stream türü, bir işlemle gönderilen verilerin, bir başka işlem tarafından alınarak işleme tabi tutulmasına da olanak tanır.

Duplex Stream Avantajları
1. Birbirine bağlı iki uç arasındaki çift yönlü veri iletimini sağlar.
2. Hem okunabilir hem de yazılabilir stream olduğundan veri aktarımı esnasında işlemlerin daha hızlı gerçekleşmesini sağlar.
3. Veri kümelerinin daha kolay yönetilmesini sağlar.

Duplex stream, iki uç arasında çift yönlü veri akışını sağlar ve birçok işlem için oldukça kullanışlıdır. Ayrıca, stream'ler arası veri aktarımı yaparken daha fazla esneklik sağlar. Bu stream türünün çift yönlü veri akışı sağladığından dolayı, daha büyük ölçekli projelerde kullanımı daha uygundur.


Transform Stream Nedir?

Transform stream, Node.js'te yaygın olarak kullanılan stream türlerinden biridir. Bu stream, verileri okurken belirli bir işleme tabi tutarak yazmanıza olanak sağlar. Örneğin, bir dosyayı okurken içeriği büyük/küçük harfe dönüştürebilirsiniz.

Transform stream, Readable ve Writable streamler arasında yer alır. Transform stream'in tek amacı, verileri okurken bir işlem yapmaktır. Veriler, işlem yapıldıktan sonra Writable stream'e aktarılır. Bu sayede, verileri okuma ve yazma işlemi arasında işlem yapmak için kullanılabilir.

Özellikler Açıklama
pipe() Bir stream'in diğerine yönlendirilmesini sağlar
transform(chunk, encoding, callback) Chunk'ı okurken işlem yapar
flush(callback) Transform stream'in son işlemi yapmasını sağlar

Transform streamler ayrıca, .pipe() yöntemi ile de kullanılabilir. Bu yöntem, bir stream'in diğerine yönlendirilmesini sağlar. Bu sayede, verileri okuma ve yazma işlemleri arasında işlem yapmak daha kolay hale gelir.

Özetle, Transform stream, verileri okurken belirli bir işleme tabi tutarak yazmanıza olanak sağlar. Bu stream türü, dosya içeriğini filtrelemek, dönüştürmek veya yeniden formatlamak için kullanılabilir.


PassThrough Stream Nedir?

PassThrough stream, adından da anlaşılacağı gibi, bir yere kadar veri akışını durdurmaksızın istediğiniz veriyi ulaştırmak için kullanılır. Veriler üzerinde herhangi bir işleme tabi tutulmaz. PassThrough stream'i, bir Readable streamden alınan veriyi bir Writable streame işlem görmeden geçirir. Bu nedenle, bu stream türü, verileri manipüle etmek istemeyen ancak yine de verileri bir noktadan diğerine aktarmak isteyenler için oldukça faydalıdır.

Örneğin, bir yarışma sırasında canlı bir video yayını yapmak istiyorsunuz. Bu durumda, görüntü işlemeye gerek olmayan ancak yine de video akışını durdurmadan bir noktadan diğerine iletmeniz gereken ses verileri için PassThrough stream kullanabilirsiniz.


ObjectMode Nedir?

ObjectMode Nedir?

Node.js'da, stream'lerin okunabilir akımın oluşturulmasında öntanımlı olarak tetiklendiği mod Normal Mode'dur. Normal Mode, verilerin metin akışı halinde işlenmesini sağlar. Ancak, bazı durumlarda, stream'de göndereceğiniz veri sadece metin olmayabilir. İşte bu tür durumlarda, ObjectMode devreye girer.

ObjectMode, stream'de nesnelerin işlenebileceği bir akım türüdür. Böylece herhangi bir kısıtlama olmaksızın, stream üzerinde işlenebilecek her türlü nesne işlenebilir. Bu özellik, stream kullanarak JSON veya XML benzeri yapıları işlemek istediğimiz durumlarda oldukça faydalıdır.

Bununla birlikte, ObjectMode'un her zaman en iyi seçenek olmayabileceği unutulmamalıdır. Büyük veri kümelerinde kullanıldığında, ihtiyaç duyulan bellek miktarını artırabilir. Yine de, performansı optimize etmek istediğimiz büyük veri kümelerinde, doğru kullanıldığında ObjectMode oldukça etkili bir araçtır.


Piping Nedir?

Node.js stream'leri, büyük veri kümeleriyle çalışırken performansı optimize etmek için tasarlanmıştır. Piping, bu stream türlerini birbirine bağlamak ve verileri bir noktadan diğerine taşımak için kullanılan bir yöntemdir.

Bu yöntem, stream'lerin bağlanmasını ve veri akışının otomatik olarak sağlanmasını sağlar. Bir stream'den diğerine veri transferi sırasında işlem yapmak gerekiyorsa, Transform stream türü kullanımı tercih edilebilir.

Piping, birden fazla stream'i birleştirmek için de kullanılabilir. Bununla birlikte, verimli bir şekilde çalışmak için, stream'lerin boyutları ve performansları göz önünde bulundurulmalı ve Optimizasyon yapılmalıdır.

Aşağıdaki örnek, bir Readable stream'i bir Writable stream'e pipe etmek için kullanılır:

const fs = require('fs');const readStream = fs.createReadStream('birDosya.txt');const writeStream = fs.createWriteStream('baskaDosya.txt');readStream.pipe(writeStream);

Buna benzer bir şekilde, birden fazla stream'in bağlanması ile oluşturulan bir sistem aşağıdaki şekilde gösterilmiştir:

Stream 1Stream 2Stream 3Stream N
.pipe().pipe().pipe()Final Output

Piping yöntemi, stream'lerin birbirine bağlanması ve verilerin kolayca taşınması ile kod yazmayı daha basit ve verimli hale getirir.


Stream I/O Olayları

writeVeri, readVeri gibi olaylar stream'in yazma ve okuma işlemlerinde kullanılan parçalarıdır. Bu olaylar, stream'te veri transferi sırasında erişim sağlamak istediğiniz veri noktalarına yerleştirilir. Veri noktaları, bir buffer veya veri akımının bir bölümü olabilir ve bu olaylar yalnızca o bölüme özgüdür.

Stream I/O olayları, stream'den okunabilir veya stream'e yazılabilir ve stream'den okunan veri ayrıntılarıyla continue, pause, resume vb. işlemler yapabilirsiniz. Olaylar, bufferın okunduğu veya yazıldığı anları yakalamak için kullanılır ve bu sayede buffer'a belirli bir noktadan veri yazabilir veya belirli bir noktaya veri okuyabilirsiniz.

Bu olaylar, streamlerin etkili bir şekilde kullanılmasına olanak tanır. Örneğin, bir dosyadaki verileri okurken, dosyanın belirli bir noktasından veri okumak veya yazmak isteyebilirsiniz. Bu gibi durumlarda, stream I/O olayları size yardımcı olur ve istediğiniz veriyi belirli bir noktada okumanıza veya yazmanıza olanak tanır.


Stream Olayları Kullanımı

Node.js kullanarak stream işlemlerini daha iyi yönetmek için, bireysel stream olayları yazma ve okuma işlemlerinde kullanılabilir. Bu olaylar, stream'in belirli bir noktasında veri transferi sırasında erişim sağlamak için kullanılan veri noktalarına yerleştirilir. Örneğin, writeVeri ve readVeri olayları bireysel stream olayları arasında yer alır ve stream'e ait okuma ve yazma işlemlerine özgüdür.

Bireysel stream olayları, kullanıcılara stream verilerinin okunma ve yazılma sürecini yönetme olanağı sağlar. Bu olaylar, özellikle büyük veri transferleri sırasında kodların anlaşılabilirliğini ve yönetilebilirliğini artırmaya yardımcı olabilir. Stream olayları da stream'in performansı ve hızı ile ilgili önemli bir unsurdur.

  • writeVeri: bir write() işlemi başarılı bir şekilde tamamlandığında tetiklenir.
  • end: herhangi bir stream işlemi tamamlandığında tetiklenir.
  • error: bir hata oluştuğunda tetiklenir.

Bireysel stream olaylarının kullanımı, ayrıca stream'i daha iyi yönetmek ve hata ayıklama sürecini kolaylaştırmak için de tercih edilir. Stream kullanıcıları, stream'de güncellemeleri ve hataları anında takip etmek için stream olaylarını kullanabilirler.

Sonuç olarak, bireysel stream olayları, yazma ve okuma işlemlerinin yönetimini kolaylaştırarak, stream'in performansını ve hızını artırır. Stream olaylarının kullanımı, kodların daha okunaklı hale gelmesini sağlayarak, büyük bir veri kümesi ile çalışırken kodların yönetilebilirliğini ve anlaşılabilirliğini artırır.


Sonuç

Node.js, büyük veri kümesi ile çalışırken performansı optimize etmek için stream'ler aracılığıyla tasarlanmıştır. Bu makalede ele alınan stream türleri, kodların daha okunaklı hale gelmesine yardımcı olabilir. Readable, Writable, Transform (), Duplex ve PassThrough stream türleri, farklı kullanım senaryolarına bağlı olarak tercih edilebilir. ObjectMode, stream'lerde kotanın çok ötesinde nesnelerin işlenebileceği bir akım türüdür. Piping, verilerin bir noktadan diğerine transferini kolaylaştıran bir araçtır. Stream I/O olayları, stream'in bir parçasıdır ve veri transferi sırasında erişim sağlamak için kullanılabilir. Stream olayları bir yazma veya okuma işlemi içinde kullanılabilir ve genellikle stream'i daha iyi bir şekilde yönetmek için tercih edilir.

Node.js stream'leri, büyük veri kümesiyle çalışırken performansı optimize etmek için güçlü bir araçtır. Yüksek performans, sıralı ve paralel veri işlemi sağlaması nedeniyle özellikle büyük veri kümelerinde önemlidir. Bu makalede ele alınan stream türleri, verileri daha fazla yönetilebilir hale getirir ve okunaklılığı artırır. Node.js, uygulamalarınızın ihtiyaçlarına veya veri işleme gereksinimlerine göre farklı stream türlerini kullanmanıza izin verir.