public KS3Object Handle(HttpWebResponse response) { KS3Object ks3Object = new KS3Object(); FileInfo destinationFile = _getObjectRequest.DestinationFile; byte[] content = null; IProgressListener progressListener = _getObjectRequest.ProgressListener; var metadata = new ObjectMetadata(); RestUtils.PopulateObjectMetadata(response, metadata); ks3Object.Metadata = metadata; Stream input = null, output = null; try { input = response.GetResponseStream(); if (progressListener != null) { input = new ProgressReportingInputStream(input, progressListener); } int SIZE = Constants.DEFAULT_STREAM_BUFFER_SIZE; byte[] buf = new byte[SIZE]; if (destinationFile != null) { output = new FileStream(_getObjectRequest.DestinationFile.FullName, FileMode.Create); } else { content = new byte[metadata.GetContentLength()]; output = new MemoryStream(content); } for (; ;) { int size = input.Read(buf, 0, SIZE); if (size <= 0) { break; } output.Write(buf, 0, size); } } finally { if (input != null) { input.Close(); } if (output != null) { output.Close(); } } if (destinationFile != null) { ks3Object.ObjectContent = destinationFile.OpenRead(); } else { ks3Object.ObjectContent = new MemoryStream(content); } return(ks3Object); }