I was actually thinking of avoiding that. The only real way to implement these with a generic `read` function is to read one byte at a time, and that isn't really performant at all for anything that's not a buffered reader.