/// <summary> /// Decompress the <paramref name="inStream">input</paramref> writing /// uncompressed data to the <paramref name="outStream">output stream</paramref> /// </summary> /// <param name="inStream">The readable stream containing data to decompress.</param> /// <param name="outStream">The output stream to receive the decompressed data.</param> /// <param name="isStreamOwner">Both streams are closed on completion if true.</param> public static void Decompress(Stream inStream, Stream outStream, bool isStreamOwner) { if (inStream == null || outStream == null) { throw new Exception("Null Stream"); } try { using (var bzipInput = new BZip2InputStream(inStream)) { bzipInput.IsStreamOwner = isStreamOwner; StreamUtils.Copy(bzipInput, outStream, new byte[4096]); } } finally { if (isStreamOwner) { // inStream is closed by the BZip2InputStream if stream owner outStream.Close(); } } }