com.jguild.jrpm.io.cpio

Class CPIOInputStream

public final class CPIOInputStream extends FilterInputStream implements CPIOConstants

CPIOInputStream 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 informations about a entry) and afterwards reading from the stream the file specified by the entry.

 CPIOInputStream cpioIn = new CPIOInputStream(new BufferedInputStream(
         new FileInputStream(new File("test.cpio"))));
 CPIOEntry cpioEntry;
 

while ((cpioEntry = cpioIn.getNextEntry()) != null) { System.out.println(cpioEntry.getName()); int tmp; StringBuffer buf = new StringBuffer(); 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

Author: Michael Kuss

Constructor Summary
CPIOInputStream(InputStream in)
Construct the cpio input stream
Method Summary
intavailable()
Returns 0 after EOF has reached for the current entry data, otherwise always return 1.
voidclose()
Closes the CPIO input stream.
voidcloseEntry()
Closes the current CPIO entry and positions the stream for reading the next entry.
CPIOEntrygetNextEntry()
Reads the next CPIO file entry and positions stream at the beginning of the entry data.
intread()
Reads a byte of data.
intread(byte[] b, int off, int len)
Reads from the current CPIO entry into an array of bytes.
longskip(long n)
Skips specified number of bytes in the current CPIO entry.

Constructor Detail

CPIOInputStream

public CPIOInputStream(InputStream in)
Construct the cpio input stream

Parameters: in The cpio stream

Method Detail

available

public int 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.

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()
Closes the CPIO input stream.

Throws: IOException if an I/O error has occurred

closeEntry

public void 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

getNextEntry

public CPIOEntry getNextEntry()
Reads the next CPIO file entry and positions stream at the beginning of the entry data.

Returns: the CPIOEntry just read

Throws: IOException if an I/O error has occurred or if a CPIO file error has occurred

read

public int read()
Reads a byte of data. This method will block until enough input is available.

Returns: the byte read, or -1 if end of input is reached

Throws: IOException if an I/O error has occurred or if a CPIO file error has occurred

read

public int read(byte[] b, int off, int len)
Reads from the current CPIO entry into an array of bytes. Blocks until some input is available.

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)
Skips specified number of bytes in the current CPIO entry.

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