Delphi Stream İşlemleri

Bu yazıda delphi ile TStream abstract sınıfından türetilen çeşitli Stream sınıfları ile fazla kod yazmadan yapabileceğimiz pratik işlemlerden bahsedeceğim.

Öncelikle stream nedir? Sorusunu cevaplayalım. Stream türkçe terim karşılığı akım demektir. Programcılıkta akım verilerin bit düzeyinde bir yerden başka bir yere hızlı bir şekilde aktarılması, iletilmesi anlamında kullanılır. Bu yerlerden kasıt genellikle Disk üzerinden Belleğe yada Bellek üzerinden Diske aktarım şeklinde olabilir. Örneğin bir text dosyası üzerinde arama işlemi yapılacaksa bu dosyayı stream yardımı ile ilk önce belleğe aktarır, daha sonra arama algoritmalarını bellek üzerinde ki veriye uygularız. Eğer dosya aşırı büyük bir boyuta sahip değilse, uyguladığımız yöntem bize ciddi anlamda performans kazanımı sağlayacaktır.

Eee yazmaya başlayalım artık…

Yukarıdaki fonksiyon 1.parametre ile verilen dosyayı LoadFromFile methodu ile Stream içersine aktarır. 2.parametre ile verilen metini stream içinde arar. Bulunan metinleri 3.parametrediki metin ile değiştirir. İşlem bittikten sonra yeni oluşan stringi WriteString methodu ile stream içersine yazar. SaveToFile methodu ile de yeni çıktıyı mevcut dosya üzerine kayıt eder. Test case i aşağıdaki gibidir.

SaveToFile methodu TCustomMemoryStream den, LoadFromFile methodu ise TMemoryStream den türetilmiş olan tüm Stream sınıfların da mevcuttur. FileStream sınıfı dosyalarla doğrudan ilgili olduğu için bu sınıf içersinde LoadFromFile ve SaveToFile methodlarını aramak mantıksızdır. Çünkü FileStream constructor ı yardımı ile doğrudan dosyalar üzerinde çalıştığı için bu metholara gerek görülmemiştir.

Şu noktayada dikkat edilmesini istiyorum, Yukarıda 16 satırda yaptığımız işlemi başka dillerde yapmaya kalkıştığımızda ciddi anlamda işkenceye dönüşüyor. Dosyadan okumak için buffer lar tanımlanır, looplar açılır byte byte yada satır satır okuma işlemleri yapılır. Tekrar kayıt etmek için gene aynı işlemler tekrarlanır. VCL’in bunları bize hazır olarak sunması bence mükemmel bir özellik 🙂

Delphide dosyalama işlemlerinden ziyade Stream kopyalama ve Stream dönüştürme işlemleride cok basit şekillerde yapılır.

Bir stream içeriğini başka bir stream e kopyalamak için sadece 2 satır yeterli 🙂

Bir çok sınıfta SaveToStream, LoadFromStream methodlarıda bulunmaktadır. Örneğin bir bitmap nesnesini Stream içersine aktarmak için sadece tek satır kod yazmak yeterli;

Yada bir Stream içeriğini TRichEdit yada TMemo içersine aktarmak için 2 satır kod yeterli;

Kısacası delphi diyorum ve aşağıdaki sınıflarıda incelemenizi öneriyorum.

VCL de bulunan Abstract Stream Sınıfları;

VCL de bulunan doğrudan kullanılabilir Stream Sınıfları;