Chris,
The code creates a buffer of 4K which is the optimum size, and copies from stream to stream via this buffer.
Creating a buffer that is the size of the entire file is not scaleable, nor more efficient. This will soon hit memory limits, particularly when, as you say, "We will be expecting huge zip files".
The ICSharpCode.SharpZipLib.Core.StreamUtils.Copy method simply copies from input to output. You can replace
StreamUtils.Copy(zipStream, streamWriter, buffer);
with
int n;
do {
n = zipStream.Read(buffer, 0, 4096);
streamWriter.Write(buffer, 0, n);
} while (n > 0);
That way you also avoid the need for a Length property which is as you say not available.
Regards,
David