    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one
    003 * or more contributor license agreements.  See the NOTICE file
    004 * distributed with this work for additional information
    005 * regarding copyright ownership.  The ASF licenses this file
    006 * to you under the Apache License, Version 2.0 (the
    007 * "License"); you may not use this file except in compliance
    008 * with the License.  You may obtain a copy of the License at
    009 *
    010 * http://www.apache.org/licenses/LICENSE-2.0
    011 *
    012 * Unless required by applicable law or agreed to in writing,
    013 * software distributed under the License is distributed on an
    014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015 * KIND, either express or implied.  See the License for the
    016 * specific language governing permissions and limitations
    017 * under the License.
    018 */
    019package org.apache.commons.compress.archivers.jar;
    020
    021import java.io.IOException;
    022import java.io.InputStream;
    023
    024import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    025import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
    026
    027/**
    028 * Implements an input stream that can read entries from jar files.
    029 *
    030 * @NotThreadSafe
    031 */
    032public class JarArchiveInputStream extends ZipArchiveInputStream {
    033
    034    /**
    035     * Checks if the signature matches what is expected for a jar file
    036     * (in this case it is the same as for a ZIP file).
    037     *
    038     * @param signature
    039     *            the bytes to check
    040     * @param length
    041     *            the number of bytes to check
    042     * @return true, if this stream is a jar archive stream, false otherwise
    043     */
    044    public static boolean matches(final byte[] signature, final int length ) {
    045        return ZipArchiveInputStream.matches(signature, length);
    046    }
    047
    048    /**
    049     * Creates an instance from the input stream using the default encoding.
    050     *
    051     * @param inputStream the input stream to wrap
    052     */
    053    public JarArchiveInputStream( final InputStream inputStream ) {
    054        super(inputStream);
    055    }
    056
    057    /**
    058     * Creates an instance from the input stream using the specified encoding.
    059     *
    060     * @param inputStream the input stream to wrap
    061     * @param encoding the encoding to use
    062     * @since 1.10
    063     */
    064    public JarArchiveInputStream( final InputStream inputStream, final String encoding ) {
    065        super(inputStream, encoding);
    066    }
    067
    068    @Override
    069    public JarArchiveEntry getNextEntry() throws IOException {
    070        return getNextJarEntry();
    071    }
    072
    073    /**
    074     * Gets the next entry.
    075     *
    076     * @return the next entry.
    077     * @throws IOException
    078     * @deprecated Use {@link #getNextEntry()}.
    079     */
    080    @Deprecated
    081    public JarArchiveEntry getNextJarEntry() throws IOException {
    082        final ZipArchiveEntry entry = getNextZipEntry();
    083        return entry == null ? null : new JarArchiveEntry(entry);
    084    }
    085}