org.apache.commons.compress.archivers.tar
Class TarBuffer

java.lang.Object
  extended by org.apache.commons.compress.archivers.tar.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: 155439 $ $Date: 2008-07-05 20:15:52 -0400 (Sat, 05 Jul 2008) $
Author:
Timothy Gerard Endres, Peter Donald

Field Summary
static int DEFAULT_BLOCKSIZE
           
static int DEFAULT_RECORDSIZE
           
private  byte[] m_blockBuffer
           
private  int m_blockSize
           
private  int m_currBlkIdx
           
private  int m_currRecIdx
           
private  boolean m_debug
           
private  java.io.InputStream m_input
           
private  java.io.OutputStream m_output
           
private  int m_recordSize
           
private  int m_recsPerBlock
           
 
Constructor Summary
TarBuffer(java.io.InputStream input)
           
TarBuffer(java.io.InputStream input, int blockSize)
           
TarBuffer(java.io.InputStream input, int blockSize, int recordSize)
           
TarBuffer(java.io.OutputStream output)
           
TarBuffer(java.io.OutputStream output, int blockSize)
           
TarBuffer(java.io.OutputStream output, int blockSize, int recordSize)
           
 
Method Summary
 void close()
          Close the TarBuffer.
protected  void debug(java.lang.String message)
           
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[] buffer, int offset)
          Write an archive record to the archive, where the record may be inside of a larger array buffer.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_RECORDSIZE

public static final int DEFAULT_RECORDSIZE
See Also:
Constant Field Values

DEFAULT_BLOCKSIZE

public static final int DEFAULT_BLOCKSIZE
See Also:
Constant Field Values

m_blockBuffer

private byte[] m_blockBuffer

m_blockSize

private int m_blockSize

m_currBlkIdx

private int m_currBlkIdx

m_currRecIdx

private int m_currRecIdx

m_debug

private boolean m_debug

m_input

private java.io.InputStream m_input

m_output

private java.io.OutputStream m_output

m_recordSize

private int m_recordSize

m_recsPerBlock

private int m_recsPerBlock
Constructor Detail

TarBuffer

public TarBuffer(java.io.InputStream input)

TarBuffer

public TarBuffer(java.io.InputStream input,
                 int blockSize)

TarBuffer

public TarBuffer(java.io.InputStream input,
                 int blockSize,
                 int recordSize)

TarBuffer

public TarBuffer(java.io.OutputStream output)

TarBuffer

public TarBuffer(java.io.OutputStream output,
                 int blockSize)

TarBuffer

public TarBuffer(java.io.OutputStream output,
                 int blockSize,
                 int recordSize)
Method Detail

setDebug

public void setDebug(boolean debug)
Set the debugging flag for the buffer.

Parameters:
debug - If true, print debugging output.

getBlockSize

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

Returns:
The BlockSize value

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.

Returns:
The RecordSize value

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.
Returns:
The EOFRecord value

close

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

Throws:
java.io.IOException

readRecord

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

Returns:
The record data.
Throws:
java.io.IOException - Description of Exception

skipRecord

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

Throws:
java.io.IOException

writeRecord

public void writeRecord(byte[] record)
                 throws java.io.IOException
Write an archive record to the archive.

Parameters:
record - The record data to write to the archive.
Throws:
java.io.IOException

writeRecord

public void writeRecord(byte[] buffer,
                        int offset)
                 throws java.io.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:
buffer - The buffer containing the record data to write.
offset - The offset of the record data within buf.
Throws:
java.io.IOException

flushBlock

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

Throws:
java.io.IOException

initialize

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


readBlock

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

writeBlock

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

Throws:
java.io.IOException - Description of Exception

debug

protected void debug(java.lang.String message)