示例#1
0
 /**
  * Returns a new RandomAccessInputStream around the raw handle underlying the provided stream,
  * instead of using a zip handle.
  *
  * <p>NB: closes the provided stream.
  */
 public static RandomAccessInputStream getRawStream(
     final LocationService locationService, final RandomAccessInputStream stream)
     throws IOException {
   // NB: We need a raw handle on the ZIP data itself, not a ZipHandle.
   final String id = stream.getFileName();
   final IRandomAccess rawHandle = locationService.getHandle(id, false, false);
   return new RandomAccessInputStream(locationService.getContext(), rawHandle, id);
 }
示例#2
0
    @Override
    public void close(final boolean fileOnly) throws IOException {
      for (final String name : mappedFiles) {
        final IRandomAccess handle = locationService.getMappedFile(name);
        locationService.mapFile(name, null);
        if (handle != null) {
          handle.close();
        }
      }
      mappedFiles.clear();

      super.close(fileOnly);

      if (metadata != null) metadata.close(fileOnly);
      if (!fileOnly) metadata = null;

      mappedFiles = new ArrayList<String>();
    }
示例#3
0
    /**
     * Extracts the String id of the provided stream.
     *
     * @param locationService - The location service to use for mapping files
     * @param stream - Stream, built around a .zip file, to extract the actual id from
     * @param mappedFiles - Optional param. If provided, all discovered entries in the underlying
     *     archive will be added to this list.
     * @return An id of the base entry in the .zip
     * @throws IOException
     */
    public static String unzipId(
        final LocationService locationService,
        final RandomAccessInputStream stream,
        final List<String> mappedFiles)
        throws IOException {
      final ZipInputStream zip = new ZipInputStream(stream);
      ZipEntry ze = null;

      while (true) {
        ze = zip.getNextEntry();
        if (ze == null) break;
        final ZipHandle handle =
            new ZipHandle(locationService.getContext(), stream.getFileName(), ze);
        locationService.mapFile(ze.getName(), handle);
        if (mappedFiles != null) mappedFiles.add(ze.getName());
      }

      final ZipHandle base = new ZipHandle(locationService.getContext(), stream.getFileName());
      final String id = base.getEntryName();
      base.close();

      return id;
    }