As I mentioned above, I'm personally uncomfortable adding so much code for a premature optimization that we're not guaranteed to need right now. I haven't personally benchmarked your code, but it seems that a Reader/Writer-based implementation could be optimized very close to a "super ideal" implementation. 

If I'm coming in to look at this module, it would be unclear to me which of the various methods I should be using to decompress/compress the stream I have. I would much rather have one choice and know exactly what to do.