Streams are cool and efficient; but a downside is that if you want to replay a stream you need to be able to fit the full stream in memory (or on disk) which is often kind of against the point of having streams. Which means it requires rethinking some patterns!
Either or! In this case I was talking about AsyncRead/AsyncWrite. But you can do a streaming parse to turn an AsyncRead into a typed Stream, and a streaming encode to turn the stream into an AsyncRead again. And the io::copy(reader, writer). But caching is risky with all of em