org.apache.tomcat.util.http

## Class MimeHeaders

- java.lang.Object
- - org.apache.tomcat.util.http.MimeHeaders

-     public class MimeHeaders
      extends Object

  Memory-efficient repository for Mime Headers. When the object is recycled, it will keep the allocated headers[] and all the MimeHeaderField - no GC is generated. For input headers it is possible to use the MessageByte for Fields - so no GC will be generated. The only garbage is generated when using the String for header names/values - this can't be avoided when the servlet calls header methods, but is easy to avoid inside tomcat. The goal is to use _only_ MessageByte-based Fields, and reduce to 0 the memory overhead of tomcat. TODO: XXX one-buffer parsing - for http ( other protocols don't need that ) XXX remove unused methods XXX External enumerations, with 0 GC. XXX use HeaderName ID
  Author:
    dac@eng.sun.com, James Todd [gonzo@eng.sun.com], Costin Manolache, kevin seguin

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `DEFAULT_HEADER_SIZE` Initial size - should be == average number of headers per request XXX make it configurable ( fine-tuning of web-apps )

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MimeHeaders()` Creates a new MimeHeaders object using a default buffer size.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `MessageBytes` | `addValue(byte[] b, int startN, int len)` Create a new named header using un-translated byte[].
    `MessageBytes` | `addValue(String name)` Create a new named header , return the MessageBytes container for the new value
    `void` | `clear()` Clears all header fields.
    `void` | `duplicate(MimeHeaders source)`
    `int` | `findHeader(String name, int starting)` Find the index of a header with the given name.
    `String` | `getHeader(String name)`
    `MessageBytes` | `getName(int n)`
    `MessageBytes` | `getUniqueValue(String name)` Finds and returns a unique header field with the given name.
    `MessageBytes` | `getValue(int n)`
    `MessageBytes` | `getValue(String name)` Finds and returns a header field with the given name.
    `Enumeration<String>` | `names()` Returns an enumeration of strings representing the header field names.
    `void` | `recycle()` Clears all header fields.
    `void` | `removeHeader(String name)` Removes a header field with the specified name.
    `void` | `setLimit(int limit)` Set limit on the number of header fields.
    `MessageBytes` | `setValue(String name)` Allow "set" operations, which removes all current values for this header.
    `int` | `size()`
    `String` | `toString()` EXPENSIVE!!!
    `Enumeration<String>` | `values(String name)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_HEADER_SIZE

          public static final int DEFAULT_HEADER_SIZE

      Initial size - should be == average number of headers per request XXX make it configurable ( fine-tuning of web-apps )
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### MimeHeaders

          public MimeHeaders()

      Creates a new MimeHeaders object using a default buffer size.

  - ### Method Detail

    - #### setLimit

          public void setLimit(int limit)

      Set limit on the number of header fields.
      Parameters:
        `limit` - The new limit

    - #### recycle

          public void recycle()

      Clears all header fields.

    - #### clear

          public void clear()

      Clears all header fields.

    - #### toString

          public String toString()

      EXPENSIVE!!! only for debugging.
      Overrides:
        `toString` in class `Object`

    - #### duplicate

          public void duplicate(MimeHeaders source)
                         throws IOException

      Throws:
        `IOException`

    - #### size

          public int size()

      Returns:
        the current number of header fields.

    - #### getName

          public MessageBytes getName(int n)

      Parameters:
        `n` - The header index
      Returns:
        the Nth header name, or null if there is no such header. This may be used to iterate through all header fields.

    - #### getValue

          public MessageBytes getValue(int n)

      Parameters:
        `n` - The header index
      Returns:
        the Nth header value, or null if there is no such header. This may be used to iterate through all header fields.

    - #### findHeader

          public int findHeader(String name,
                       int starting)

      Find the index of a header with the given name.
      Parameters:
        `name` - The header name
        `starting` - Index on which to start looking
      Returns:
        the header index

    - #### names

          public Enumeration<String> names()

      Returns an enumeration of strings representing the header field names. Field names may appear multiple times in this enumeration, indicating that multiple fields with that name exist in this header.
      Returns:
        the enumeration

    - #### values

          public Enumeration<String> values(String name)

    - #### addValue

          public MessageBytes addValue(String name)

      Create a new named header , return the MessageBytes container for the new value
      Parameters:
        `name` - The header name
      Returns:
        the message bytes container for the value

    - #### addValue

          public MessageBytes addValue(byte[] b,
                              int startN,
                              int len)

      Create a new named header using un-translated byte[]. The conversion to chars can be delayed until encoding is known.
      Parameters:
        `b` - The header name bytes
        `startN` - Offset
        `len` - Length
      Returns:
        the message bytes container for the value

    - #### setValue

          public MessageBytes setValue(String name)

      Allow "set" operations, which removes all current values for this header.
      Parameters:
        `name` - The header name
      Returns:
        the message bytes container for the value

    - #### getValue

          public MessageBytes getValue(String name)

      Finds and returns a header field with the given name. If no such field exists, null is returned. If more than one such field is in the header, an arbitrary one is returned.
      Parameters:
        `name` - The header name
      Returns:
        the value

    - #### getUniqueValue

          public MessageBytes getUniqueValue(String name)

      Finds and returns a unique header field with the given name. If no such field exists, null is returned. If the specified header field is not unique then an `IllegalArgumentException` is thrown.
      Parameters:
        `name` - The header name
      Returns:
        the value if unique
      Throws:
        `IllegalArgumentException` - if the header has multiple values

    - #### getHeader

          public String getHeader(String name)

    - #### removeHeader

          public void removeHeader(String name)

      Removes a header field with the specified name. Does nothing if such a field could not be found.
      Parameters:
        `name` - the name of the header field to be removed

Copyright © 2000-2017 Apache Software Foundation. All Rights Reserved.