# AMPHP v3 — ByteStream Patterns --- ## ReadableBuffer and WritableBuffer ```php write("chunk1"); $buf->write("chunk2"); $buf->end(); $result = $buf->buffer(); // "chunk1chunk2" ``` --- ## pipe() — transfer data between streams ```php end(); // IMPORTANT: pipe() does NOT close the sink — caller must do it echo $sink->buffer(); // "transfer me" ``` --- ## ReadableIterableStream — wrap array/iterator ```php buffer(); // "binary data" // Option 2: stream chunk-by-chunk $stream = new Payload(new ReadableBuffer("binary data")); while (null !== $chunk = $stream->read()) { processChunk($chunk); // null signals end of stream } ``` --- ## GZIP Compression / Decompression ```php write("some data"); $compressor->end(); $compressed = $sink->buffer(); // Decompress $source = new ReadableBuffer($compressed); $decompressor = new DecompressingReadableStream($source, \ZLIB_ENCODING_GZIP); $original = buffer($decompressor); // "some data" ``` --- ## Base64 Encode / Decode ```php accept()) { async(function () use ($socket): void { foreach (splitLines($socket) as $line) { $socket->write(strtoupper($line) . "\n"); } $socket->end(); }); } ``` --- ## ReadableResourceStream / WritableResourceStream ```php write("line\n"); $out->end(); ```