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
FieldsModifier and TypeFieldDescriptionprivate final int
private boolean
private long
private CpioArchiveEntry
private long
private boolean
private final byte[]
Cached buffer - must only be used locally in the class (COMPRESS-172 - reduce garbage collection).private final byte[]
private final byte[]
private final byte[]
Cached buffer - must only be used locally in the class (COMPRESS-172 - reduce garbage collection).private final ZipEncoding
The encoding to use for file names and labels.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
ConstructorsConstructorDescriptionConstructs the cpio input stream with a blocksize ofBLOCK_SIZE
and expecting ASCII file names.CpioArchiveInputStream
(InputStream in, int blockSize) Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
expecting ASCII file names.CpioArchiveInputStream
(InputStream in, int blockSize, String encoding) Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
.CpioArchiveInputStream
(InputStream in, String encoding) Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
. -
Method Summary
Modifier and TypeMethodDescriptionint
Returns 0 after EOF has reached for the current entry data, otherwise always return 1.void
close()
Closes the CPIO input stream.private void
Closes the current CPIO entry and positions the stream for reading the next entry.private void
Check to make sure that this stream has not been closedDeprecated.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 0xC771int
read
(byte[] b, int off, int len) Reads from the current CPIO entry into an array of bytes.private long
readAsciiLong
(int length, int radix) private long
readBinaryLong
(int length, boolean swapHalfWord) private String
readCString
(int length) private int
readFully
(byte[] b, int off, int len) private CpioArchiveEntry
readNewEntry
(boolean hasCrc) private CpioArchiveEntry
private CpioArchiveEntry
readOldBinaryEntry
(boolean swapHalfWord) private byte[]
readRange
(int len) private void
skip
(int bytes) long
skip
(long n) Skips specified number of bytes in the current CPIO entry.private void
Skips the padding zeros written after the TRAILER!!! 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
-
Field Details
-
closed
private boolean closed -
entry
-
entryBytesRead
private long entryBytesRead -
entryEOF
private boolean entryEOF -
tmpbuf
private final byte[] tmpbuf -
crc
private long crc -
twoBytesBuf
private final byte[] twoBytesBufCached buffer - must only be used locally in the class (COMPRESS-172 - reduce garbage collection). -
fourBytesBuf
private final byte[] fourBytesBufCached buffer - must only be used locally in the class (COMPRESS-172 - reduce garbage collection). -
sixBytesBuf
private final byte[] sixBytesBuf -
blockSize
private final int blockSize -
zipEncoding
The encoding to use for file names and labels.
-
-
Constructor Details
-
CpioArchiveInputStream
Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
and expecting ASCII file names.- Parameters:
in
- The cpio stream
-
CpioArchiveInputStream
Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
expecting ASCII file names.- Parameters:
in
- The cpio streamblockSize
- The block size of the archive.- Since:
- 1.5
-
CpioArchiveInputStream
Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
.- Parameters:
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.- Throws:
IllegalArgumentException
- ifblockSize
is not bigger than 0- Since:
- 1.6
-
CpioArchiveInputStream
Constructs the cpio input stream with a blocksize ofBLOCK_SIZE
.- Parameters:
in
- The cpio streamencoding
- 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 matchlength
- length of data- Returns:
- whether the buffer seems to contain CPIO data
-
available
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 classFilterInputStream
- 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
Closes the CPIO input stream.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classFilterInputStream
- Throws:
IOException
- if an I/O error has occurred
-
closeEntry
Closes the current CPIO entry and positions the stream for reading the next entry.- Throws:
IOException
- if an I/O error has occurred or if a CPIO file error has occurred
-
ensureOpen
Check to make sure that this stream has not been closed- Throws:
IOException
- if the stream is already closed
-
getNextCPIOEntry
Deprecated.UsegetNextEntry()
.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
Description copied from class:ArchiveInputStream
Gets the next Archive Entry in this Stream.- Specified by:
getNextEntry
in classArchiveInputStream<CpioArchiveEntry>
- Returns:
- the next entry, or
null
if there are no more entries. - Throws:
IOException
- if the next entry could not be read.
-
read
Reads from the current CPIO entry into an array of bytes. Blocks until some input is available.- Overrides:
read
in classFilterInputStream
- Parameters:
b
- the buffer into which the data is readoff
- the start offset of the datalen
- 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
-
readAsciiLong
- Throws:
IOException
-
readBinaryLong
- Throws:
IOException
-
readCString
- Throws:
IOException
-
readFully
- Throws:
IOException
-
readNewEntry
- Throws:
IOException
-
readOldAsciiEntry
- Throws:
IOException
-
readOldBinaryEntry
- Throws:
IOException
-
readRange
- Throws:
IOException
-
skip
- Throws:
IOException
-
skip
Skips specified number of bytes in the current CPIO entry.- Overrides:
skip
in classFilterInputStream
- Parameters:
n
- the number of bytes to skip- Returns:
- the actual number of bytes skipped
- Throws:
IOException
- if an I/O error has occurredIllegalArgumentException
- if n < 0
-
skipRemainderOfLastBlock
Skips the padding zeros written after the TRAILER!!! entry.- Throws:
IOException
-
getNextEntry()
.