org.apache.commons.compress.archivers.tar

Class TarOutputStream

public final class TarOutputStream extends FilterOutputStream

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().

Version: $Revision: 155439 $ $Date: 2006-08-28 08:10:02 +0200 (Mon, 28 Aug 2006) $

Author: Timothy Gerard Endres time@ice.com Peter Donald

See Also: TarInputStream TarEntry

Field Summary
static intLONGFILE_ERROR
Flag to indicate that an error should be generated if an attempt is made to write an entry that exceeds the 100 char POSIX limit.
static intLONGFILE_GNU
Flag to indicate that entry name should be formatted according to GNU tar extension if an attempt is made to write an entry that exceeds the 100 char POSIX limit.
static intLONGFILE_TRUNCATE
Flag to indicate that entry name should be truncated if an attempt is made to write an entry that exceeds the 100 char POSIX limit.
byte[]m_assemBuf
intm_assemLen
TarBufferm_buffer
intm_currBytes
intm_currSize
intm_longFileMode
byte[]m_oneBuf
byte[]m_recordBuf
Constructor Summary
TarOutputStream(OutputStream output)
Construct a TarOutputStream using specified input stream and default block and record sizes.
TarOutputStream(OutputStream output, int blockSize)
Construct a TarOutputStream using specified input stream, block size and default record sizes.
TarOutputStream(OutputStream output, int blockSize, int recordSize)
Construct a TarOutputStream using specified input stream, block size and record sizes.
Method Summary
voidclose()
Ends the TAR archive and closes the underlying OutputStream.
voidcloseEntry()
Close an entry.
voidcopyEntryContents(InputStream input)
Copies the contents of the specified stream into current tar archive entry.
voidfinish()
Ends the TAR archive without closing the underlying OutputStream.
intgetRecordSize()
Get the record size being used by this stream's TarBuffer.
voidputNextEntry(TarEntry entry)
Put an entry on the output stream.
voidsetBufferDebug(boolean debug)
Sets the debugging flag in this stream's TarBuffer.
voidsetLongFileMode(int longFileMode)
Set the mode used to work with entrys exceeding 100 chars (and thus break the POSIX standard).
voidwrite(int data)
Writes a byte to the current tar archive entry.
voidwrite(byte[] buffer)
Writes bytes to the current tar archive entry.
voidwrite(byte[] buffer, int offset, int count)
Writes bytes to the current tar archive entry.
voidwriteEOFRecord()
Write an EOF (end of archive) record to the tar archive.

Field Detail

LONGFILE_ERROR

public static final int LONGFILE_ERROR
Flag to indicate that an error should be generated if an attempt is made to write an entry that exceeds the 100 char POSIX limit.

LONGFILE_GNU

public static final int LONGFILE_GNU
Flag to indicate that entry name should be formatted according to GNU tar extension if an attempt is made to write an entry that exceeds the 100 char POSIX limit. Note that this makes the jar unreadable by non-GNU tar commands.

LONGFILE_TRUNCATE

public static final int LONGFILE_TRUNCATE
Flag to indicate that entry name should be truncated if an attempt is made to write an entry that exceeds the 100 char POSIX limit.

m_assemBuf

private byte[] m_assemBuf

m_assemLen

private int m_assemLen

m_buffer

private TarBuffer m_buffer

m_currBytes

private int m_currBytes

m_currSize

private int m_currSize

m_longFileMode

private int m_longFileMode

m_oneBuf

private byte[] m_oneBuf

m_recordBuf

private byte[] m_recordBuf

Constructor Detail

TarOutputStream

public TarOutputStream(OutputStream output)
Construct a TarOutputStream using specified input stream and default block and record sizes.

Parameters: output stream to create TarOutputStream from

See Also: DEFAULT_BLOCKSIZE DEFAULT_RECORDSIZE

TarOutputStream

public TarOutputStream(OutputStream output, int blockSize)
Construct a TarOutputStream using specified input stream, block size and default record sizes.

Parameters: output stream to create TarOutputStream from blockSize the block size

See Also: DEFAULT_RECORDSIZE

TarOutputStream

public TarOutputStream(OutputStream output, int blockSize, int recordSize)
Construct a TarOutputStream using specified input stream, block size and record sizes.

Parameters: output stream to create TarOutputStream from blockSize the block size recordSize the record size

Method Detail

close

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

Throws: IOException when an IO error causes operation to fail

closeEntry

public void closeEntry()
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.

Throws: IOException when an IO error causes operation to fail

copyEntryContents

void copyEntryContents(InputStream input)
Copies the contents of the specified stream into current tar archive entry.

Parameters: input The InputStream from which to read entrys data

Throws: IOException when an IO error causes operation to fail

finish

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

Throws: IOException when an IO error causes operation to fail

getRecordSize

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

Returns: The TarBuffer record size.

putNextEntry

public void putNextEntry(TarEntry entry)
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.

Parameters: entry The TarEntry to be written to the archive.

Throws: IOException when an IO error causes operation to fail

setBufferDebug

public void setBufferDebug(boolean debug)
Sets the debugging flag in this stream's TarBuffer.

Parameters: debug The new BufferDebug value

setLongFileMode

public void setLongFileMode(int longFileMode)
Set the mode used to work with entrys exceeding 100 chars (and thus break the POSIX standard). Must be one of the LONGFILE_* constants.

Parameters: longFileMode the mode

write

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

Parameters: data The byte written.

Throws: IOException when an IO error causes operation to fail

write

public void write(byte[] buffer)
Writes bytes to the current tar archive entry. This method simply calls write( byte[], int, int ).

Parameters: buffer The buffer to write to the archive.

Throws: IOException when an IO error causes operation to fail

write

public void write(byte[] buffer, int offset, int count)
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.

Parameters: buffer The buffer to write to the archive. offset The offset in the buffer from which to get bytes. count The number of bytes to write.

Throws: IOException when an IO error causes operation to fail

writeEOFRecord

private void writeEOFRecord()
Write an EOF (end of archive) record to the tar archive. An EOF record consists of a record of all zeros.

Throws: IOException when an IO error causes operation to fail