org.codehaus.plexus.archiver.tar

Class TarBuffer


public class TarBuffer
extends java.lang.Object

The TarBuffer class implements the tar archive concept of a buffered input stream. This concept goes back to the days of blocked tape drives and special io devices. In the Java universe, the only real function that this class performs is to ensure that files have the correct "block" size, or other tars will complain.

You should never have a need to access this class directly. TarBuffers are created by Tar IO Streams.

Version:
$Revision: 2436 $ $Date: 2005-09-01 13:20:41 -0400 (Thu, 01 Sep 2005) $ from org.apache.ant.tools.tar.TarBuffer v1.12

Field Summary

static int
DEFAULT_BLKSIZE
static int
DEFAULT_RCDSIZE
private byte[]
blockBuffer
private int
blockSize
private int
currBlkIdx
private int
currRecIdx
private boolean
debug
private InputStream
inStream
private OutputStream
outStream
private int
recordSize
private int
recsPerBlock

Constructor Summary

TarBuffer(InputStream inStream)
TarBuffer(InputStream inStream, int blockSize)
TarBuffer(InputStream inStream, int blockSize, int recordSize)
TarBuffer(OutputStream outStream)
TarBuffer(OutputStream outStream, int blockSize)
TarBuffer(OutputStream outStream, int blockSize, int recordSize)

Method Summary

void
close()
Close the TarBuffer.
private void
flushBlock()
Flush the current data block if it has any data in it.
int
getBlockSize()
Get the TAR Buffer's block size.
int
getCurrentBlockNum()
Get the current block number, zero based.
int
getCurrentRecordNum()
Get the current record number, within the current block, zero based.
int
getRecordSize()
Get the TAR Buffer's record size.
private void
initialize(int blockSize, int recordSize)
Initialization common to all constructors.
boolean
isEOFRecord(byte[] record)
Determine if an archive record indicate End of Archive.
private boolean
readBlock()
byte[]
readRecord()
Read a record from the input stream and return the data.
void
setDebug(boolean debug)
Set the debugging flag for the buffer.
void
skipRecord()
Skip over a record on the input stream.
private void
writeBlock()
Write a TarBuffer block to the archive.
void
writeRecord(byte[] record)
Write an archive record to the archive.
void
writeRecord(byte[] buf, int offset)
Write an archive record to the archive, where the record may be inside of a larger array buffer.

Field Details

DEFAULT_BLKSIZE

public static final int DEFAULT_BLKSIZE
Field Value:
10240

DEFAULT_RCDSIZE

public static final int DEFAULT_RCDSIZE
Field Value:
512

blockBuffer

private byte[] blockBuffer

blockSize

private int blockSize

currBlkIdx

private int currBlkIdx

currRecIdx

private int currRecIdx

debug

private boolean debug

inStream

private InputStream inStream

outStream

private OutputStream outStream

recordSize

private int recordSize

recsPerBlock

private int recsPerBlock

Constructor Details

TarBuffer

public TarBuffer(InputStream inStream)

TarBuffer

public TarBuffer(InputStream inStream,
                 int blockSize)

TarBuffer

public TarBuffer(InputStream inStream,
                 int blockSize,
                 int recordSize)

TarBuffer

public TarBuffer(OutputStream outStream)

TarBuffer

public TarBuffer(OutputStream outStream,
                 int blockSize)

TarBuffer

public TarBuffer(OutputStream outStream,
                 int blockSize,
                 int recordSize)

Method Details

close

public void close()
            throws IOException
Close the TarBuffer. If this is an output buffer, also flush the current block before closing.

flushBlock

private void flushBlock()
            throws IOException
Flush the current data block if it has any data in it.

getBlockSize

public int getBlockSize()
Get the TAR Buffer's block size. Blocks consist of multiple records.

getCurrentBlockNum

public int getCurrentBlockNum()
Get the current block number, zero based.
Returns:
The current zero based block number.

getCurrentRecordNum

public int getCurrentRecordNum()
Get the current record number, within the current block, zero based. Thus, current offset = (currentBlockNum * recsPerBlk) + currentRecNum.
Returns:
The current zero based record number.

getRecordSize

public int getRecordSize()
Get the TAR Buffer's record size.

initialize

private void initialize(int blockSize,
                        int recordSize)
Initialization common to all constructors.

isEOFRecord

public boolean isEOFRecord(byte[] record)
Determine if an archive record indicate End of Archive. End of archive is indicated by a record that consists entirely of null bytes.
Parameters:
record - The record data to check.

readBlock

private boolean readBlock()
            throws IOException
Returns:
false if End-Of-File, else true

readRecord

public byte[] readRecord()
            throws IOException
Read a record from the input stream and return the data.
Returns:
The record data.

setDebug

public void setDebug(boolean debug)
Set the debugging flag for the buffer.
Parameters:
debug - If true, print debugging output.

skipRecord

public void skipRecord()
            throws IOException
Skip over a record on the input stream.

writeBlock

private void writeBlock()
            throws IOException
Write a TarBuffer block to the archive.

writeRecord

public void writeRecord(byte[] record)
            throws IOException
Write an archive record to the archive.
Parameters:
record - The record data to write to the archive.

writeRecord

public void writeRecord(byte[] buf,
                        int offset)
            throws IOException
Write an archive record to the archive, where the record may be inside of a larger array buffer. The buffer must be "offset plus record size" long.
Parameters:
buf - The buffer containing the record data to write.
offset - The offset of the record data within buf.