public class CpioArchiveInputStream extends ArchiveInputStream implements CpioConstants
The stream can be read by extracting a cpio entry (containing all informations about a 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)
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 and Description |
|---|
CpioArchiveInputStream(InputStream in)
Construct the cpio input stream with a blocksize of
BLOCK_SIZE and expecting ASCII file
names. |
CpioArchiveInputStream(InputStream in,
int blockSize)
Construct the cpio input stream with a blocksize of
BLOCK_SIZE expecting ASCII file
names. |
CpioArchiveInputStream(InputStream in,
int blockSize,
String encoding)
Construct the cpio input stream with a blocksize of
BLOCK_SIZE. |
CpioArchiveInputStream(InputStream in,
String encoding)
Construct the cpio input stream with a blocksize of
BLOCK_SIZE. |
| Modifier and Type | Method and 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()
Reads the next CPIO file entry and positions stream at the beginning of
the entry data.
|
ArchiveEntry |
getNextEntry()
Returns 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.
|
canReadEntryData, count, count, getBytesRead, getCount, pushedBackBytes, readmark, markSupported, read, resetpublic CpioArchiveInputStream(InputStream in)
BLOCK_SIZE and expecting ASCII file
names.in - The cpio streampublic CpioArchiveInputStream(InputStream in, String encoding)
BLOCK_SIZE.in - The cpio streamencoding - The encoding of file names to expect - use null for
the platform's default.public CpioArchiveInputStream(InputStream in, int blockSize)
BLOCK_SIZE expecting ASCII file
names.in - The cpio streamblockSize - The block size of the archive.public CpioArchiveInputStream(InputStream in, int blockSize, String encoding)
BLOCK_SIZE.in - The cpio streamblockSize - The block size of the archive.encoding - The encoding of file names to expect - use null for
the platform's default.public int available() throws IOException
Programs should not count on this method to return the actual number of bytes that could be read without blocking.
available in class InputStreamIOException - if an I/O error has occurred or if a CPIO file error has
occurredpublic void close() throws IOException
close in interface Closeableclose in interface AutoCloseableclose in class InputStreamIOException - if an I/O error has occurredpublic CpioArchiveEntry getNextCPIOEntry() throws IOException
IOException - if an I/O error has occurred or if a CPIO file error has
occurredpublic int read(byte[] b, int off, int len) throws IOException
read in class InputStreamb - the buffer into which the data is readoff - the start offset of the datalen - the maximum number of bytes readIOException - if an I/O error has occurred or if a CPIO file error has
occurredpublic long skip(long n) throws IOException
skip in class InputStreamn - the number of bytes to skipIOException - if an I/O error has occurredIllegalArgumentException - if n < 0public ArchiveEntry getNextEntry() throws IOException
ArchiveInputStreamgetNextEntry in class ArchiveInputStreamnull if there are no more entriesIOException - if the next entry could not be readpublic static boolean matches(byte[] signature, int length)
signature - data to matchlength - length of dataCopyright © 2018 The Apache Software Foundation. All rights reserved.