Class ArchiveInputStream

java.lang.Object
java.io.InputStream
org.apache.commons.compress.archivers.ArchiveInputStream
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
ArArchiveInputStream, ArjArchiveInputStream, CpioArchiveInputStream, DumpArchiveInputStream, TarArchiveInputStream, ZipArchiveInputStream

public abstract class ArchiveInputStream extends InputStream
Archive input streams MUST override the InputStream.read(byte[], int, int) - or read() - method so that reading from the stream generates EOF for the end of data in each entry as well as at the end of the file proper.

The getNextEntry() method is used to reset the input stream ready for reading the data from the next entry.

The input stream classes must also implement a method with the signature:

 public static boolean matches(byte[] signature, int length)
 
which is used by the ArchiveStreamFactory to autodetect the archive type from the first few bytes of a stream.
  • Field Details

    • single

      private final byte[] single
    • BYTE_MASK

      private static final int BYTE_MASK
      See Also:
    • bytesRead

      private long bytesRead
      holds the number of bytes read in this stream
  • Constructor Details

    • ArchiveInputStream

      public ArchiveInputStream()
  • Method Details

    • getNextEntry

      public abstract ArchiveEntry getNextEntry() throws IOException
      Returns the next Archive Entry in this Stream.
      Returns:
      the next entry, or null if there are no more entries
      Throws:
      IOException - if the next entry could not be read
    • read

      public int read() throws IOException
      Reads a byte of data. This method will block until enough input is available. Simply calls the InputStream.read(byte[], int, int) method. MUST be overridden if the InputStream.read(byte[], int, int) method is not overridden; may be overridden otherwise.
      Specified by:
      read in class InputStream
      Returns:
      the byte read, or -1 if end of input is reached
      Throws:
      IOException - if an I/O error has occurred
    • count

      protected void count(int read)
      Increments the counter of already read bytes. Doesn't increment if the EOF has been hit (read == -1)
      Parameters:
      read - the number of bytes read
    • count

      protected void count(long read)
      Increments the counter of already read bytes. Doesn't increment if the EOF has been hit (read == -1)
      Parameters:
      read - the number of bytes read
      Since:
      1.1
    • pushedBackBytes

      protected void pushedBackBytes(long pushedBack)
      Decrements the counter of already read bytes.
      Parameters:
      pushedBack - the number of bytes pushed back.
      Since:
      1.1
    • getCount

      @Deprecated public int getCount()
      Deprecated.
      this method may yield wrong results for large archives, use #getBytesRead instead
      Returns the current number of bytes read from this stream.
      Returns:
      the number of read bytes
    • getBytesRead

      public long getBytesRead()
      Returns the current number of bytes read from this stream.
      Returns:
      the number of read bytes
      Since:
      1.1
    • canReadEntryData

      public boolean canReadEntryData(ArchiveEntry archiveEntry)
      Whether this stream is able to read the given entry.

      Some archive formats support variants or details that are not supported (yet).

      Parameters:
      archiveEntry - the entry to test
      Returns:
      This implementation always returns true.
      Since:
      1.1