Class TarBuffer

java.lang.Object
org.jboss.shrinkwrap.impl.base.io.tar.TarBuffer

public class TarBuffer extends 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: 1.10 $
See Also:
  • Field Details

    • DEFAULT_RCDSIZE

      public static final int DEFAULT_RCDSIZE
      See Also:
    • DEFAULT_BLKSIZE

      public static final int DEFAULT_BLKSIZE
      See Also:
    • inStream

      private InputStream inStream
    • outStream

      private OutputStream outStream
    • blockBuffer

      private byte[] blockBuffer
    • currBlkIdx

      private int currBlkIdx
    • currRecIdx

      private int currRecIdx
    • blockSize

      private int blockSize
    • recordSize

      private int recordSize
    • recsPerBlock

      private int recsPerBlock
    • debug

      private boolean debug
  • 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

    • initialize

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

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

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

      public void setDebug(boolean debug)
      Set the debugging flag for the buffer.
      Parameters:
      debug - If true, print debugging output.
    • 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.
    • skipRecord

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

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

      private boolean readBlock() throws IOException
      Returns:
      false if End-Of-File, else true
      Throws:
      IOException
    • 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.
    • 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.
      Throws:
      IOException
    • 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.
      Throws:
      IOException
    • writeBlock

      private void writeBlock() throws IOException
      Write a TarBuffer block to the archive.
      Throws:
      IOException
    • flushBlock

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

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