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: 155439 $ $Date: 2008-07-05 20:15:52 -0400 (Sat, 05 Jul 2008) $
    Author:
    Timothy Gerard Endres, Peter Donald
    • Constructor Summary

      Constructors 
      Constructor Description
      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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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

      • 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)