/// <summary>
    /// Create an InflaterInputStream with the specified decompressor
    /// and the specified buffer size.
    /// </summary>
    /// <param name = "baseInputStream">
    /// The InputStream to read bytes from
    /// </param>
    /// <param name = "inflater">
    /// The decompressor to use
    /// </param>
    /// <param name = "bufferSize">
    /// Size of the buffer to use
    /// </param>
    public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
    {
      if (baseInputStream == null)
      {
        throw new ArgumentNullException("InflaterInputStream baseInputStream is null");
      }

      if (inflater == null)
      {
        throw new ArgumentNullException("InflaterInputStream Inflater is null");
      }

      if (bufferSize <= 0)
      {
        throw new ArgumentOutOfRangeException("bufferSize");
      }

      this.baseInputStream = baseInputStream;
      this.inf = inflater;
      buf = new byte[bufferSize];

      if (baseInputStream.CanSeek)
      {
        this.len = (int)baseInputStream.Length;
      }
      else
      {
        this.len = 0;
      }
    }
 /// <summary>
 /// Create an InflaterInputStream with the specified decompressor
 /// and a default buffer size of 4KB.
 /// </summary>
 /// <param name = "baseInputStream">
 /// The source of input data
 /// </param>
 /// <param name = "inf">
 /// The decompressor used to decompress data read from baseInputStream
 /// </param>
 public InflaterInputStream(Stream baseInputStream, Inflater inf)
   : this(baseInputStream, inf, 4096)
 {
 }