/**
   * 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() <B>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) throws IOException {
    StringBuffer name = entry.getHeader().name;

    // NOTE
    // This check is not adequate, because the maximum file length that
    // can be placed into a POSIX (ustar) header depends on the precise
    // locations of the path elements (slashes) within the file's full
    // pathname. For this reason, writeEntryHeader() can still throw an
    // InvalidHeaderException if the file's full pathname will not fit
    // in the header.

    if ((entry.isUnixTarFormat() && name.length() > TarHeader.NAMELEN)
        || (!entry.isUnixTarFormat()
            && name.length() > (TarHeader.NAMELEN + TarHeader.PREFIXLEN))) {
      throw new InvalidHeaderException(
          "file name '"
              + name
              + "' is too long ( "
              + name.length()
              + " > "
              + (entry.isUnixTarFormat()
                  ? TarHeader.NAMELEN
                  : (TarHeader.NAMELEN + TarHeader.PREFIXLEN))
              + " bytes )");
    }

    entry.writeEntryHeader(this.recordBuf);

    this.buffer.writeRecord(this.recordBuf);

    this.currBytes = 0;

    if (entry.isDirectory()) this.currSize = 0;
    else this.currSize = entry.getSize();
  }
  /**
   * Writes the next tar entry header on the stream
   *
   * @param entry
   * @throws IOException
   */
  public void putNextEntry(TarEntry entry) throws IOException {
    closeCurrentEntry();

    byte[] header = new byte[TarConstants.HEADER_BLOCK];
    entry.writeEntryHeader(header);

    write(header);

    currentEntry = entry;
  }