Unfortunately the zip functions absolutely need
the input stream to be buffered, or performance will
be very bad.
Also the zip read functions return very short reads
(< 1 kB on average), so we need to buffer them up
to get a usable write size.
Using a FileChannel improves performance a little
bit in addition, but it's probably the least
critical change.