@Override
  public void uncompress(File source, StreamProcessor processor) throws IOException {

    try (SevenZFile sevenZFile = new SevenZFile(source)) {

      SevenZArchiveEntry szae;
      while (null != (szae = sevenZFile.getNextEntry())) {

        String originName = szae.getName();
        // shadow file or empty file
        if (szae.getSize() == 0 || originName.indexOf("/.") != -1) {
          continue;
        }
        // apache.common.IOUtils default buffer size
        final byte[] buffer = new byte[1024 * 4];
        sevenZFile.read(buffer);

        try (ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer)) {
          processor.process(
              inputStream,
              szae.getSize(),
              originName.substring(originName.lastIndexOf('/') + 1, originName.length()));
        }
      }
    }
  }