public static byte[] unZipItOnlineWithCache(String zipFileURL, String filename) {
        byte[] out = null;
        //fetching if not already fetched
        byte[] zipbytes = null;
        if (zipOnlineCacheName1.equals(zipFileURL)) {
            zipbytes = zipOnlineCacheData1;
        } else if (zipOnlineCacheName2.equals(zipFileURL)) {
            zipbytes = zipOnlineCacheData2;
        } else if (zipOnlineCacheName1.isEmpty()) {
            zipbytes = FetchOnlineFile(zipFileURL);
            zipOnlineCacheData1 = zipbytes;
            zipOnlineCacheName1 = zipFileURL;
        } else if (zipOnlineCacheName2.isEmpty()) {
            zipbytes = FetchOnlineFile(zipFileURL);
            zipOnlineCacheData2 = zipbytes;
            zipOnlineCacheName2 = zipFileURL;
        } else {
            System.out.println("Both caches missed! weird!");
            zipbytes = FetchOnlineFile(zipFileURL);
        }

        //System.out.println("entered unzipit2 for "+filename);
        byte[] buffer = new byte[1024];
        try {
            //get the zip file content
            ZipInputStream zis
                    = new ZipInputStream(new ByteArrayInputStream(zipbytes));
            //get the zipped file list entry
            ZipEntry ze = zis.getNextEntry();
            while (ze != null) {
                String fileName = ze.getName();
                //System.out.println("[zip] fileName: "+fileName+" while filename:"+filename+" and output folder is: "+outputFolder);
                if (fileName.equalsIgnoreCase(filename)) {
                    //System.out.println("extracting!!!!!!!");
                    //out = new File(System.getProperty("java.io.tmpdir")+"tmp");
                    //System.out.println(System.getProperty("java.io.tmpdir")+"tmp");
                    //System.out.println("file unzip : " + newFile.getAbsoluteFile() + " ");

                    //create all non exists folders
                    //else you will hit FileNotFoundException for compressed folder
                    //new File(out.getParent()).mkdirs();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    //FileOutputStream fos = new FileOutputStream(out);
                    int len;
                    while ((len = zis.read(buffer)) > 0) {
                        baos.write(buffer, 0, len);
                    }
                    baos.close();
                    out = baos.toByteArray();
                }
                ze = zis.getNextEntry();
            }
            zis.closeEntry();
            zis.close();
            //System.out.println("Done ");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return out;
    }