public static UnZipResult unzip(byte[] source) {
        List<ZipItem> itemList = new ArrayList<>();
        ZipItem metaDataItem = null;
        try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(source))) {
            ZipEntry entry;
            while ((entry = zipIn.getNextEntry()) != null) {
                if (entry.isDirectory()) {
                    continue;
                }
                try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
                    byte[] buffer = new byte[1024];
                    int offset;
                    while ((offset = zipIn.read(buffer)) != -1) {
                        out.write(buffer, 0, offset);
                    }
                    String entryName = entry.getName();
                    if (metaDataItem == null && Constants.CONFIG_EXPORT_METADATA.equals(entryName)) {
                        metaDataItem = new ZipItem(entryName, out.toString("UTF-8"));
                        continue;
                    }
                    if (metaDataItem == null && Constants.CONFIG_EXPORT_METADATA_NEW.equals(entryName)) {
                        metaDataItem = new ZipItem(entryName, out.toString("UTF-8"));
                        continue;
                    }
                    itemList.add(new ZipItem(entryName, out.toString("UTF-8")));
                } catch (IOException e) {
                    LOGGER.error("unzip error", e);
                }
            }
        } catch (IOException e) {
            LOGGER.error("unzip error", e);
        }
        return new UnZipResult(itemList, metaDataItem);
    }
@Test
    void testUnzip() {
        
        List<ZipUtils.ZipItem> zipItemList = new ArrayList<>();
        zipItemList.add(new ZipUtils.ZipItem("test", "content"));
        byte[] zip = ZipUtils.zip(zipItemList);
        assertTrue(zip != null && zip.length > 0);
        
        ZipUtils.UnZipResult unZipResult = ZipUtils.unzip(zip);
        List<ZipUtils.ZipItem> result = unZipResult.getZipItemList();
        assertEquals(zipItemList.size(), result.size());
        assertEquals(zipItemList.get(0).getItemName(), result.get(0).getItemName());
        assertEquals(zipItemList.get(0).getItemData(), result.get(0).getItemData());
        
    }