private final boolean parseStream(
  JarInputStream jis, boolean toSave) {
  JarEntry je = null;
  boolean rc = true;
  try {
    JarOutputStream jos = null;
    if (toSave)
      jos = new JarOutputStream(
        new BufferedOutputStream(
        new FileOutputStream(handler.cachePath +
        "/" + jarName + ".jar")));
    String k = null;
    while((je = jis.getNextJarEntry()) != null) {
      String entryName = je.getName();
      if (toSave)
        jos.putNextEntry((JarEntry)je.clone());
      ByteArrayOutputStream baos =
        new ByteArrayOutputStream();
      BufferedInputStream bis =
        new BufferedInputStream(jis);
      int i;
      while((i = bis.read()) != -1)
        baos.write(i);
      byte[] buf = baos.toByteArray();
      if (entryName.endsWith(".class")) {
        if (classes == null)
          classes = new HashMap(100);
          k = entryName.substring(0,
   entryName.lastIndexOf('.')).replace('/', '.');
        Class jarCl = defineClass(k, buf, 0,
          buf.length);
        classes.put(k, jarCl);
      } else {
        if (resources == null)
          resources = new HashMap();
        resources.put(entryName, buf);
      }
      if (toSave)
        jos.write(buf, 0, buf.length);
      jis.closeEntry();
    }
    jis.close();
    if (toSave) {
      jos.closeEntry();
      jos.close();
    }
  }
  catch(Exception e) {
    rc = false;
  }
  return rc;
}