Maven module :un.storage : archive-tar :
Class : un.storage.archive.tar.TarOutputStream
Extends/Implements : un.api.io.WrapOutputStream
Subclasses : -

The TarOutputStream writes a UNIX tar archive as an OutputStream. Methods are
provided to put entries, and then write their contents by writing to this
stream using write().
Kerry Menzel Contributed the code to support file sizes
greater than 2GB (longs versus ints).
author  Timothy Gerard Endres,


Variables : currSize, currBytes, oneBuf, recordBuf, assemLen, assemBuf, buffer
Functions : TarOutputStream, TarOutputStream, TarOutputStream, finish, close, getRecordSize, putNextEntry, closeEntry, write, write, write


protected long currSize

protected long currBytes

protected byte[] oneBuf

protected byte[] recordBuf

protected int assemLen

protected byte[] assemBuf

protected TarBuffer buffer


public void TarOutputStream (ByteOutputStream os)

public void TarOutputStream (ByteOutputStream os, int blockSize)

public void TarOutputStream (ByteOutputStream os, int blockSize, int recordSize)


Ends the TAR archive without closing the underlying OutputStream. The
result is that the EOF record of nulls is written.
public void finish ()


Ends the TAR archive and closes the underlying OutputStream. This means
that finish() is called followed by calling the TarBuffer's close().
public void close ()


Get the record size being used by this stream's TarBuffer.
return  The TarBuffer record size.
public int getRecordSize ()


Put an entry on the output stream. This writes the entry's header record
and positions the output stream for writing the contents of the entry.
Once this method is called, the stream is ready for calls to write() to
write the entry's contents. Once the contents are written, closeEntry()
MUST be called to ensure that all buffered data is completely
written to the output stream.

@param entry The TarEntry to be written to the archive.
public void putNextEntry (TarEntry entry)


Close an entry. This method MUST be called for all file entries that
contain data. The reason is that we must buffer data written to the
stream in order to satisfy the buffer's record based writes. Thus, there
may be data fragments still being assembled that must be written to the
output stream before this entry is closed and the next entry written.
public void closeEntry ()


Writes a byte to the current tar archive entry.
This method simply calls read( byte[], int, int ).
param  b The byte written.
public void write (byte b)


Writes bytes to the current tar archive entry.
This method simply calls read( byte[], int, int ).
param  wBuf The buffer to write to the archive.
return  The number of bytes read, or -1 at EOF.
public void write (byte[] wBuf)


Writes bytes to the current tar archive entry. This method is aware of
the current entry and will throw an exception if you attempt to write
bytes past the length specified for the current entry. The method is also
(painfully) aware of the record buffering required by TarBuffer, and
manages buffers that are not a multiple of recordsize in length,
including assembling records from small buffers.

This method simply calls read( byte[], int, int ).

@param wBuf The buffer to write to the archive.
@param wOffset The offset in the buffer from which to get bytes.
@param numToWrite The number of bytes to write.
public void write (byte[] wBuf, int wOffset, int numToWrite)