Read text from a byte stream with a StreamReader.

streams A `StreamReader` turns bytes from a stream into text lines.

Stream Reader

label
StreamReaderExample.cs
Replay: real traced execution (multi-file project)
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string label = "note";
        string text = label + ":ready";

        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
        using StreamReader reader = new StreamReader(stream);
        string line = reader.ReadLine() ?? "";
        bool hasColon = line.Contains(":");

        Console.WriteLine($"line={line}");
        Console.WriteLine($"hasColon={hasColon}");
    }
}
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string label = "memo";
        string text = label + ":ready";

        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
        using StreamReader reader = new StreamReader(stream);
        string line = reader.ReadLine() ?? "";
        bool hasColon = line.Contains(":");

        Console.WriteLine($"line={line}");
        Console.WriteLine($"hasColon={hasColon}");
    }
}
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string label = "task";
        string text = label + ":ready";

        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
        using StreamReader reader = new StreamReader(stream);
        string line = reader.ReadLine() ?? "";
        bool hasColon = line.Contains(":");

        Console.WriteLine($"line={line}");
        Console.WriteLine($"hasColon={hasColon}");
    }
}
  1. label ← note, text ← note:ready, line ← note:ready, hasColon ← True

    6{7    static void Main()8    {9        string label→ note = "note"; //@label="memo", "task"10        string text→ note:ready = labelnote + ":ready";1112        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13        using StreamReader reader = new StreamReader(stream);14        string line→ note:ready = reader.ReadLine() ?? "";15        bool hasColon→ True = linenote:ready.Contains(":");1617        Console.WriteLine($"line={linenote:ready}");18        Console.WriteLine($"hasColon={hasColonTrue}");19    }
    outputline=note:ready
    hasColon=True
  1. label ← memo, text ← memo:ready, line ← memo:ready, hasColon ← True

    6{7    static void Main()8    {9        string label→ memo = "memo";10        string text→ memo:ready = labelmemo + ":ready";1112        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13        using StreamReader reader = new StreamReader(stream);14        string line→ memo:ready = reader.ReadLine() ?? "";15        bool hasColon→ True = linememo:ready.Contains(":");1617        Console.WriteLine($"line={linememo:ready}");18        Console.WriteLine($"hasColon={hasColonTrue}");19    }
    outputline=memo:ready
    hasColon=True
  1. label ← task, text ← task:ready, line ← task:ready, hasColon ← True

    6{7    static void Main()8    {9        string label→ task = "task";10        string text→ task:ready = labeltask + ":ready";1112        using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13        using StreamReader reader = new StreamReader(stream);14        string line→ task:ready = reader.ReadLine() ?? "";15        bool hasColon→ True = linetask:ready.Contains(":");1617        Console.WriteLine($"line={linetask:ready}");18        Console.WriteLine($"hasColon={hasColonTrue}");19    }
    outputline=task:ready
    hasColon=True