Selasa, 27 Oktober 2015

Cara memahami Stream pada Delphi

Stream merupakan “sungai” yang mengalirkan data digital. Data pada stream tidak hanya data dalam bentuk ASCII atau text biasa, tapi juga data yang menggunakan karakter yang jarang kita jumpai. Coba aja anda buka file Bitmap menggunakan Notepad atau Notepad++, maka anda akan menjumpai data dalam bentuk yang tidak anda kenali seperti biasanya file ASCII atau file Text, tetapi anda akan mengenalinya apabila dalam bentuk gambar. Anda bisa mengolah data menjadi sebuah file atau menjadi sebuah Stream. Data yang disimpan ke dalam file maka anda bisa melihat file tersebut dan biasanya menggunakan extensi tertentu (missal .bmp, .jpg, dll) dan anda dapat membukanya kembali setelah program telah ditutup. Berbeda dengan Stream, data yang disimpan di dalam stream maka data tidak dapat kita lihat secara kasat mata dan anda tidak bisa membukanya kembali setelah program ditutup.

Stream juga bisa menjadi perantara bentuk penyimanan data, missal apabila anda ingin menyimpan data dari bentuk file ke bentuk data field blob pada database maka anda bisa menggunakan perantara Stream untuk mengubah bentuk penyimpanannya, perhatikan contoh pada file bitmap berikut:
Procedure SimpanBitmap;
Var BMP:TBitmap;
    BS:TBlobStream;
    T:TTable;
Begin
  // menyipakan stream yang akan disimpan ke blob database
  BS:=TTable.CreateBlobStream(TTable.FieldByName(‘gambar’),bmWrite); 

// membuat data Bitmap
  BMP:=TBitmap.Create;

// menentukan nilai format pixel pada bitmap
  BMP.PixelFormat:=pf24bit;

// menentukan lebar bitmap
  BMP.Width:=150;

// menentukan tinggi bitmap
  BMP.Height:=150;

// menggambar lingkaran penuh pada bitmap
  BMP.Canvas.Ellips(10,10,140,140);

// menyimpan data bitmap ke dalam file
  BMP.SaveToFile(‘D:\gambar.bmp’);

// menyimpan data bitmap ke dalam stream yang sudah disiapkan di atas
  BMP.SaveToStream(BS);
End;

Atau contoh lain pada class TBitmap, anda bisa membaca data file BMP dan menyimpan datanya ke dalam data stream dengan menggunakan function LoadFromFile kemudian SaveToStream, atau sebaliknya bila anda hendak menyimpan data bitmap dari stream ke dalam bentuk file dengan menggunakan function LoadFromStream dan SaveToFile.
Lalu bagaimana jika file yang hendak disimpan ke dalam blob bukan file Bitmap misal MP3, maka anda bisa menggunakan class TFileStream untuk mengubah data file ke dalam data stream dan kemudian menyimpan data stream ke dalam blob, begitu juga sebaliknya dari data blob ke bentuk stream kemudian dari bentuk stream menyimpannya ke data file. Perhatikan contoh berikut :
Procedure simpan_MP3_dari_File_Ke_Blob;
Var FS:TFileStream;
    BS:TBlobStream;
Begin
// menyiapkan data mp3 dari stream ke bentuk blob
  BS:=TTable1.CreateBlobStream(TTable1.FieldByName(‘mp3’),bmWrite);

// mengambil data file dan merubahnya menjadi data stream
  FS:=TFileStream.Create(‘D:\lagu_1.mp3’, fmOpenRead);

// meng-copy data stream pada FS ke BS 
// dan mengubahnya ke dalam data blob
  BS.CopyFrom(FS);

// membebaskan memory FS dan BS
  BS.Free;
  FS.Free;
End;


Procedure simpan_MP3_dari_Blob_Ke_File;
Var FS:TFileStream;
    BS:TBlobStream;
Begin
// mengambil data mp3 dari blob ke bentuk stream
  BS:=TTable1.CreateBlobStream(TTable1.FieldByName(‘mp3’),bmRead);

// menyiapkan stream untuk diubah ke bentuk file
  FS:=TFileStream.Create(‘D:\lagu_1.mp3’,fmCreate or fmOpenWrite);

// meng-copy data stream pada BS ke FS 
// dan mengubahnya ke dalam data file
  FS.CopyFrom(BS);

// membebaskan memory FS dan BS
  BS.Free;
  FS.Free;
End;

Class dasar Stream pada Delphi adalah TStream yang kemudian diturunkan menjadi TFileStream, TMemoryStream, TBlobStream, TWinSocketStream, TStringStream, TOleStream dan lain-lain. Penggunaan Stream pada Delphi sangat banyak

Tidak ada komentar:

Posting Komentar