> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baenninger.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Streams

Streams stellen uns eine standardisierte API bereit, um mit Binärdaten zu arbeiten. Wir haben unteranderem Zugriff auf folgende Eigenschaften:

* Position
* Länge
* Kapazität

## Schreiben

Wir können mit der `Write()`-Methode in den Stream schreiben.

```csharp theme={null}
var stream = new MemoryStream();

byte[] data = Encoding.UTF8.GetBytes("Levin Bänninger");
stream.Write(data, 0, data.Length);
```

## Lesen

<Steps>
  <Step title="Zurück zum Start">
    Um den Stream von Anfang an zu lesen, müssen wir zum Start zurück.

    ```csharp theme={null}
    stream.Seek(0, SeekOrigin.Begin);
    ```
  </Step>

  <Step title="Buffer erstellen">
    Nun können wir einen Buffer erstellen, mit der Länge des Streams.

    ```csharp theme={null}
    byte[] readBuffer = new byte[stream.Length];
    ```
  </Step>

  <Step title="Daten auslesen">
    Jetzt können wir mit der Methode `Read()` die Daten auslesen und in den Buffer schreiben.

    ```csharp theme={null}
    stream.Read(readBuffer, 0, readBuffer.Length);
    ```
  </Step>

  <Step title="Buffer auslesen">
    Um nun den Buffer auszulsen nutzen wir die `GetString()`-Methode.

    ```csharp theme={null}
    string name = Encoding.UTF8.GetString(readBuffer);
    ```
  </Step>
</Steps>
