public ZipInputStream createInputStream() throws IOException {
   ZipInputStream stream = new ZipInputStream(inner.createInputStream());
   if (openEntry) {
     stream.getNextEntry();
   }
   return stream;
 }
  Collection<FileAnnotation> parse(
      final InputStreamProvider file, final Collection<String> sources, final String moduleName)
      throws IOException, DocumentException, SAXException {
    InputStream input = null;
    try {
      input = file.getInputStream();
      Map<String, String> hashToMessageMapping = new HashMap<String, String>();
      Map<String, String> categories = new HashMap<String, String>();
      for (XmlBugInstance bug : preParse(input)) {
        hashToMessageMapping.put(bug.getInstanceHash(), bug.getMessage());
        categories.put(bug.getType(), bug.getCategory());
      }
      IOUtils.closeQuietly(input);

      input = file.getInputStream();
      return parse(input, sources, moduleName, hashToMessageMapping, categories);
    } finally {
      IOUtils.closeQuietly(input);
    }
  }
  /**
   * Decodes and sub-samples an image
   *
   * @param is Stream to read image from
   * @param width Max height of returned image
   * @param height Max width of returned image
   * @param config Bitmap target coding
   * @return An image constrained by the given bounds, or null on failure
   */
  public static Bitmap decodeStream(
      InputStreamProvider provider, int width, int height, Bitmap.Config config) {
    InputStream is;

    // Check the size of the image
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = config;
    options.inJustDecodeBounds = true;

    try {
      is = provider.getInputStream();
      BitmapFactory.decodeStream(is, null, options);
    } catch (IOException e) {
      return null;
    }

    if (options.outWidth < 0 || options.outHeight < 0) {
      return null;
    }

    setSampleSize(width, height, options);

    // Reset the stream and decode the image
    Bitmap bm;
    try {
      is = provider.getInputStream();
      bm = BitmapFactory.decodeStream(is, null, options);
    } catch (IOException e) {
      return null;
    }

    // Resize the image to fit the bounds
    if (bm != null) {
      return resize(bm, width, height);
    }

    return null;
  }