/**
   * if the ID3v2.4 tag header's values have been modified, then resize the raw binary buffer and
   * store the new values there. When finished, reset the dirty flag to indicate that the buffer is
   * up to date, and the tag header is now ready to be saved to the .mp3 file.
   */
  public void setBuffer() {
    System.arraycopy(version.getIdBytes(), 0, header, 0, ID3TagVersion.NUM_ID_BYTES);
    header[5] =
        (byte)
            (unsynchronization
                ? header[5] | TAG_HEADER_UNSYNCHRONIZATION_MASK
                : header[5] & ~TAG_HEADER_UNSYNCHRONIZATION_MASK);
    header[5] =
        (byte)
            (extendedHeaderPresent
                ? header[5] | TAG_HEADER_EXTENDED_HEADER_PRESENT_MASK
                : header[5] & ~TAG_HEADER_EXTENDED_HEADER_PRESENT_MASK);
    header[5] =
        (byte)
            (experimentalIndicator
                ? header[5] | TAG_HEADER_EXPERIMENTAL_INDICATOR_MASK
                : header[5] & ~TAG_HEADER_EXPERIMENTAL_INDICATOR_MASK);
    header[5] =
        (byte)
            (footerPresent
                ? header[5] | TAG_HEADER_FOOTER_PRESENT_MASK
                : header[5] & ~TAG_HEADER_FOOTER_PRESENT_MASK);
    System.arraycopy(ID3v24FrameBodyUtility.synchsafeIntToBytes(tagSize), 0, header, 6, 4);

    dirty = false;
  }
  /**
   * The default constructor is called when creating a new ID3v2.4 tag header. The default values
   * used are:
   *
   * <ul>
   *   <li>tag size is 0 bytes
   *   <li>unsynchronization
   *   <li>no extended header present
   *   <li>experimental indicator is false
   *   <li>no footer present
   * </ul>
   */
  public ID3v24TagHeader() {
    header = new byte[TAG_HEADER_SIZE];
    version = ID3TagVersion.ID3V2_4;
    tagSize = 0;
    unsynchronization = true;
    extendedHeaderPresent = false;
    experimentalIndicator = false;
    footerPresent = false;
    dirty =
        true; // the tag header has been created, but the values have not yet been written to the
    // raw binary buffer

    System.arraycopy(version.getIdBytes(), 0, header, 0, ID3TagVersion.NUM_ID_BYTES);
  }