Class ArchiveOutputStream

java.lang.Object
java.io.OutputStream
org.apache.commons.compress.archivers.ArchiveOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable
Direct Known Subclasses:
ArArchiveOutputStream, CpioArchiveOutputStream, TarArchiveOutputStream, ZipArchiveOutputStream

public abstract class ArchiveOutputStream extends OutputStream
Archive output stream implementations are expected to override the OutputStream.write(byte[], int, int) method to improve performance. They should also override OutputStream.close() to ensure that any necessary trailers are added.

The normal sequence of calls when working with ArchiveOutputStreams is:

  • Field Details

    • oneByte

      private final byte[] oneByte
      Temporary buffer used for the write(int) method
    • BYTE_MASK

      static final int BYTE_MASK
      See Also:
    • bytesWritten

      private long bytesWritten
      holds the number of bytes written to this stream
  • Constructor Details

    • ArchiveOutputStream

      public ArchiveOutputStream()
  • Method Details

    • putArchiveEntry

      public abstract void putArchiveEntry(ArchiveEntry entry) throws IOException
      Writes the headers for an archive entry to the output stream. The caller must then write the content to the stream and call closeArchiveEntry() to complete the process.
      Parameters:
      entry - describes the entry
      Throws:
      IOException - if an I/O error occurs
    • closeArchiveEntry

      public abstract void closeArchiveEntry() throws IOException
      Closes the archive entry, writing any trailer information that may be required.
      Throws:
      IOException - if an I/O error occurs
    • finish

      public abstract void finish() throws IOException
      Finishes the addition of entries to this stream, without closing it. Additional data can be written, if the format supports it.
      Throws:
      IOException - if the user forgets to close the entry.
    • createArchiveEntry

      public abstract ArchiveEntry createArchiveEntry(File inputFile, String entryName) throws IOException
      Create an archive entry using the inputFile and entryName provided.
      Parameters:
      inputFile - the file to create the entry from
      entryName - name to use for the entry
      Returns:
      the ArchiveEntry set up with details from the file
      Throws:
      IOException - if an I/O error occurs
    • createArchiveEntry

      public ArchiveEntry createArchiveEntry(Path inputPath, String entryName, LinkOption... options) throws IOException
      Create an archive entry using the inputPath and entryName provided. The default implementation calls simply delegates as:
      return createArchiveEntry(inputFile.toFile(), entryName);
      Subclasses should override this method.
      Parameters:
      inputPath - the file to create the entry from
      entryName - name to use for the entry
      options - options indicating how symbolic links are handled.
      Returns:
      the ArchiveEntry set up with details from the file
      Throws:
      IOException - if an I/O error occurs
      Since:
      1.21
    • write

      public void write(int b) throws IOException
      Writes a byte to the current archive entry.

      This method simply calls write( byte[], 0, 1 ).

      MUST be overridden if the OutputStream.write(byte[], int, int) method is not overridden; may be overridden otherwise.

      Specified by:
      write in class OutputStream
      Parameters:
      b - The byte to be written.
      Throws:
      IOException - on error
    • count

      protected void count(int written)
      Increments the counter of already written bytes. Doesn't increment if EOF has been hit (written == -1).
      Parameters:
      written - the number of bytes written
    • count

      protected void count(long written)
      Increments the counter of already written bytes. Doesn't increment if EOF has been hit (written == -1).
      Parameters:
      written - the number of bytes written
      Since:
      1.1
    • getCount

      @Deprecated public int getCount()
      Deprecated.
      this method may yield wrong results for large archives, use #getBytesWritten instead
      Returns the current number of bytes written to this stream.
      Returns:
      the number of written bytes
    • getBytesWritten

      public long getBytesWritten()
      Returns the current number of bytes written to this stream.
      Returns:
      the number of written bytes
      Since:
      1.1
    • canWriteEntryData

      public boolean canWriteEntryData(ArchiveEntry archiveEntry)
      Whether this stream is able to write the given entry.

      Some archive formats support variants or details that are not supported (yet).

      Parameters:
      archiveEntry - the entry to test
      Returns:
      This implementation always returns true.
      Since:
      1.1