Package org.apache.commons.compress.archivers.cpio

# Class CpioArchiveInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.commons.compress.archivers.ArchiveInputStream<CpioArchiveEntry>
org.apache.commons.compress.archivers.cpio.CpioArchiveInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `CpioConstants`

public class CpioArchiveInputStream extends ArchiveInputStream<CpioArchiveEntry> implements CpioConstants
CpioArchiveInputStream is a stream for reading cpio streams. All formats of cpio are supported (old ascii, old binary, new portable format and the new portable format with CRC).

The stream can be read by extracting a cpio entry (containing all information about an entry) and afterwards reading from the stream the file specified by the entry.

     CpioArchiveInputStream cpioIn = new CpioArchiveInputStream(Files.newInputStream(Paths.get("test.cpio")));
     CpioArchiveEntry cpioEntry;

     while ((cpioEntry = cpioIn.getNextEntry()) != null) {
         System.out.println(cpioEntry.getName());
         int tmp;
         StringBuilder buf = new StringBuilder();
         while ((tmp = cpIn.read()) != -1) {
             buf.append((char) tmp);
         }
         System.out.println(buf.toString());
     }
     cpioIn.close();

Note: This implementation should be compatible to cpio 2.5

This class uses mutable fields and is not considered to be threadsafe.

Based on code from the jRPM project (jrpm.sourceforge.net)

- ## Field Summary

  ### Fields inherited from class java.io.FilterInputStream

  `in`

  ### Fields inherited from interface org.apache.commons.compress.archivers.cpio.CpioConstants

  `BLOCK_SIZE, C_IRGRP, C_IROTH, C_IRUSR, C_ISBLK, C_ISCHR, C_ISDIR, C_ISFIFO, C_ISGID, C_ISLNK, C_ISNWK, C_ISREG, C_ISSOCK, C_ISUID, C_ISVTX, C_IWGRP, C_IWOTH, C_IWUSR, C_IXGRP, C_IXOTH, C_IXUSR, CPIO_TRAILER, FORMAT_NEW, FORMAT_NEW_CRC, FORMAT_NEW_MASK, FORMAT_OLD_ASCII, FORMAT_OLD_BINARY, FORMAT_OLD_MASK, MAGIC_NEW, MAGIC_NEW_CRC, MAGIC_OLD_ASCII, MAGIC_OLD_BINARY, S_IFMT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CpioArchiveInputStream(InputStream in)`
  Constructs the cpio input stream with a blocksize of `BLOCK_SIZE` and expecting ASCII file names.
  `CpioArchiveInputStream(InputStream in, int blockSize)`
  Constructs the cpio input stream with a blocksize of `BLOCK_SIZE` expecting ASCII file names.
  `CpioArchiveInputStream(InputStream in, int blockSize, String encoding)`
  Constructs the cpio input stream with a blocksize of `BLOCK_SIZE`.
  `CpioArchiveInputStream(InputStream in, String encoding)`
  Constructs the cpio input stream with a blocksize of `BLOCK_SIZE`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `available()`
  Returns 0 after EOF has reached for the current entry data, otherwise always return 1.
  `void`
  `close()`
  Closes the CPIO input stream.
  `CpioArchiveEntry`
  `getNextCPIOEntry()`
  Deprecated.
  Use `getNextEntry()`.
  `CpioArchiveEntry`
  `getNextEntry()`
  Gets the next Archive Entry in this Stream.
  `static boolean`
  `matches(byte[] signature, int length)`
  Checks if the signature matches one of the following magic values: Strings: "070701" - MAGIC_NEW "070702" - MAGIC_NEW_CRC "070707" - MAGIC_OLD_ASCII Octal Binary value: 070707 - MAGIC_OLD_BINARY (held as a short) = 0x71C7 or 0xC771
  `int`
  `read(byte[] b, int off, int len)`
  Reads from the current CPIO entry into an array of bytes.
  `long`
  `skip(long n)`
  Skips specified number of bytes in the current CPIO entry.

  ### Methods inherited from class org.apache.commons.compress.archivers.ArchiveInputStream

  `canReadEntryData, count, count, forEach, getBytesRead, getCharset, getCount, iterator, mark, markSupported, pushedBackBytes, read, reset`

  ### Methods inherited from class java.io.FilterInputStream

  `read`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### CpioArchiveInputStream

    public CpioArchiveInputStream(InputStream in)
    Constructs the cpio input stream with a blocksize of `BLOCK_SIZE` and expecting ASCII file names.
    Parameters:
      `in` - The cpio stream

  - ### CpioArchiveInputStream

    public CpioArchiveInputStream(InputStream in, int blockSize)
    Constructs the cpio input stream with a blocksize of `BLOCK_SIZE` expecting ASCII file names.
    Parameters:
      `in` - The cpio stream
      `blockSize` - The block size of the archive.
    Since:
      1.5

  - ### CpioArchiveInputStream

    public CpioArchiveInputStream(InputStream in, int blockSize, String encoding)
    Constructs the cpio input stream with a blocksize of `BLOCK_SIZE`.
    Parameters:
      `in` - The cpio stream
      `blockSize` - The block size of the archive.
      `encoding` - The encoding of file names to expect - use null for the platform's default.
    Throws:
      `IllegalArgumentException` - if `blockSize` is not bigger than 0
    Since:
      1.6

  - ### CpioArchiveInputStream

    public CpioArchiveInputStream(InputStream in, String encoding)
    Constructs the cpio input stream with a blocksize of `BLOCK_SIZE`.
    Parameters:
      `in` - The cpio stream
      `encoding` - The encoding of file names to expect - use null for the platform's default.
    Since:
      1.6

- ## Method Details

  - ### matches

    public static boolean matches(byte[] signature, int length)
    Checks if the signature matches one of the following magic values: Strings: "070701" - MAGIC_NEW "070702" - MAGIC_NEW_CRC "070707" - MAGIC_OLD_ASCII Octal Binary value: 070707 - MAGIC_OLD_BINARY (held as a short) = 0x71C7 or 0xC771
    Parameters:
      `signature` - data to match
      `length` - length of data
    Returns:
      whether the buffer seems to contain CPIO data

  - ### available

    public int available() throws IOException
    Returns 0 after EOF has reached for the current entry data, otherwise always return 1.

    Programs should not count on this method to return the actual number of bytes that could be read without blocking.

    Overrides:
      `available` in class `FilterInputStream`
    Returns:
      1 before EOF and 0 after EOF has reached for current entry.
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred

  - ### close

    public void close() throws IOException
    Closes the CPIO input stream.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `FilterInputStream`
    Throws:
      `IOException` - if an I/O error has occurred

  - ### getNextCPIOEntry

    @Deprecated public CpioArchiveEntry getNextCPIOEntry() throws IOException
    Deprecated.
    Use `getNextEntry()`.
    Reads the next CPIO file entry and positions stream at the beginning of the entry data.
    Returns:
      the CpioArchiveEntry just read
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred

  - ### getNextEntry

    public CpioArchiveEntry getNextEntry() throws IOException
    Description copied from class: `ArchiveInputStream`
    Gets the next Archive Entry in this Stream.
    Specified by:
      `getNextEntry` in class `ArchiveInputStream<CpioArchiveEntry>`
    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(byte[] b, int off, int len) throws IOException
    Reads from the current CPIO entry into an array of bytes. Blocks until some input is available.
    Overrides:
      `read` in class `FilterInputStream`
    Parameters:
      `b` - the buffer into which the data is read
      `off` - the start offset of the data
      `len` - the maximum number of bytes read
    Returns:
      the actual number of bytes read, or -1 if the end of the entry is reached
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred

  - ### skip

    public long skip(long n) throws IOException
    Skips specified number of bytes in the current CPIO entry.
    Overrides:
      `skip` in class `FilterInputStream`
    Parameters:
      `n` - the number of bytes to skip
    Returns:
      the actual number of bytes skipped
    Throws:
      `IOException` - if an I/O error has occurred
      `IllegalArgumentException` - if n < 0