SORU
3 ŞUBAT 2009, Salı


Akarsu kavramını açıklayabilir misiniz?

Bir akış bayt dizisi bir temsili olduğunu anlıyorum. Her akış okuma ve verilen destek mağazasını bayt yazmak için anlamına gelir sağlar. Ama stream anlamı nedir? Neden destek ile etkileşim, kendi mağazası değil mi?

Sebebi ne olursa olsun bu kavram benim için iyi işlemiyor. Makaleler bir sürü şey okudum, ama bir benzetme ya da bir şeye ihtiyacım var sanırım.

CEVAP
3 ŞUBAT 2009, Salı


Kelime "akış" (gerçek hayatta) kullandığımızda ne iletmek istediğiniz bir çok benzer bir anlamı temsil ettiği için seçilmiştir.

Biraz destek deposu unutalım, ve su akışı, bu anlamda düşünmeye başlar. Su, sürekli bir nehir akar gibi sürekli bir veri akışı alırsınız. Yok ille de bilmek veriler nerede gelen ve çoğu zaman hiç gerek yok; bir dosya, bir yuva, ya da herhangi bir diğer kaynağı değil (olmamalı) gerçekten önemli. Bu çok benzer bir alıcı akış su, mademki bunu yapmana gerek yok biliyorsun nereden geldiği; bir göl, bir çeşme ya da başka bir kaynak yok (olmamalı) gerçekten önemli.

Bu, size sadece ihtiyacınız verileri alma hakkında, nereden geldiği, ne olursa olsun umurunda olduğunu düşünmeye başladıklarında, soyut, diğer insanların daha net olmak hakkında konuştuk dedi. Akarsu sarabilirsiniz düşünmeye başlıyor, ve yöntemleri hala mükemmel çalışır. Örneğin, bunu yapabilirsiniz:

int ReadInt(StreamReader reader) { return Int32.Parse(reader.ReadLine()); }

// in another method:
Stream fileStream = new FileStream("My Data.dat");
Stream zipStream = new ZipDecompressorStream(fileStream);
Stream decryptedStream = new DecryptionStream(zipStream);
StreamReader reader = new StreamReader(decryptedStream);

int x = ReadInt(reader);

Gördüğünüz gibi, çok kolay işleme mantığını değiştirmeden giriş kaynağını değiştirmek için olur. Örneğin, bir dosya yerine bir ağ soketten veri okumak için:

Stream stream = new NetworkStream(mySocket);
StreamReader reader = new StreamReader(stream);
int x = ReadInt(reader);

Olabildiğince kolay. Ve güzellik devam ediyor, giriş kaynağı her türlü, yapı mümkün olduğunca uzun süre kullanabileceğiniz bir akış için "kapsayıcı". Bu yapabilirdim:

public class RandomNumbersStreamReader : StreamReader {
    private Random random = new Random();

    public String ReadLine() { return random.Next().ToString(); }
}

// and to call it:
int x = ReadInt(new RandomNumbersStreamReader());

Gördün mü? Senin yöntem giriş kaynağının ne olduğu önemli değil sürece, çeşitli şekillerde kaynak özelleştirebilirsiniz. Soyutlama sen çok zarif bir şekilde mantık işleme girdi ayrıştır sağlar.

Kendimize yarattığımız stream yedekleme deposu yok, ama yine de tamamen bizim amaca hizmet eder unutmayın.

Yani, özetlemek gerekirse, bir akış girişi sadece bir kaynak, uzak (özetleme) saklandığı başka bir kaynak. Soyutlama karşı koymadığın sürece, kodunuz çok esnek olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • National Geographic

    National Geo

    7 Mayıs 2006
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006