Buradaki diğer yanıtları biraz genişletmek ve noktalı olarak göreceğiniz örnek kodların çoğunu açıklamaya yardımcı olmak için, çoğu zaman doğrudan bir akışı okuyup yazmazsınız. Akışlar, veri aktarımı için düşük seviyeli bir araçtır.
Okuma ve yazma işlevlerinin tamamının bayt yönelimli olduğunu fark edeceksiniz, örneğin WriteByte (). Tamsayılar, dizgiler vb. İle uğraşmak için hiçbir işlev yoktur. Bu, akışı çok genel amaçlı yapar, ancak, örneğin, sadece metni aktarmak istiyorsanız, üzerinde çalışmayı daha az basit hale getirir.
Ancak .NET, yerel türler ve düşük düzey akış arabirimi arasında dönüşüm sağlayan ve verileri sizin için akışa veya akıştan aktaran sınıflar sağlar. Bazı dikkate değer sınıflar şunlardır:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
Bunları kullanmak için önce akışınızı alırsınız, ardından yukarıdaki sınıflardan birini oluşturursunuz ve bunu akışla ilişkilendirirsiniz. Örneğin
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader ve StreamWriter yerel türler ve bunların dize temsilleri arasında dönüşüm yapar ve ardından dizeleri bayt olarak akışa ve akıştan aktarır. Yani
myStreamWriter.Write(123);
akışa "123" (üç karakter '1', '2' ve ardından '3') yazar. Metin dosyalarıyla (örneğin html) uğraşıyorsanız, StreamReader ve StreamWriter kullanacağınız sınıflardır.
Buna karşılık
myBinaryWriter.Write(123);
32 bitlik tamsayı değeri 123'ü (0x7B, 0x00, 0x00, 0x00) temsil eden dört bayt yazar. İkili dosyalar veya ağ protokolleri ile uğraşıyorsanız, BinaryReader ve BinaryWriter kullanabilirsiniz. (Ağlar veya diğer sistemlerle veri alışverişi yapıyorsanız, bitkinliğe dikkat etmeniz gerekir , ancak bu başka bir gönderi.)