Class MimeHeaders


  • public class MimeHeaders
    extends java.lang.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 DataChunk 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_ DataChunk-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
    • Constructor Summary

      Constructors 
      Constructor Description
      MimeHeaders()
      Creates a new MimeHeaders object using a default buffer size.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      DataChunk addValue​(byte[] buffer, int startN, int len)
      Create a new named header using un-translated byte[].
      DataChunk addValue​(java.lang.String name)
      Create a new named header , return the MessageBytes container for the new value
      DataChunk addValue​(Buffer buffer, int startN, int len)
      Create a new named header using un-translated Buffer.
      DataChunk addValue​(Header header)
      Create a new named header , return the MessageBytes container for the new value
      void clear()
      Clears all header fields.
      boolean contains​(java.lang.String header)  
      boolean contains​(Header header)  
      void copyFrom​(MimeHeaders source)  
      java.lang.String getHeader​(java.lang.String name)  
      java.lang.String getHeader​(Header header)  
      int getMaxNumHeaders()  
      DataChunk getName​(int n)
      Returns the Nth header name, or null if there is no such header.
      DataChunk getValue​(int n)
      Returns the Nth header value, or null if there is no such header.
      DataChunk getValue​(java.lang.String name)
      Finds and returns a header field with the given name.
      DataChunk getValue​(Header header)
      Finds and returns a header field with the given name.
      int indexOf​(java.lang.String name, int fromIndex)
      Find the index of a header with the given name.
      int indexOf​(Header header, int fromIndex)
      Find the index of a header with the given name.
      boolean isSerialized​(int n)
      Get the header's "serialized" flag.
      void mark()  
      java.lang.Iterable<java.lang.String> names()
      Returns an enumeration of strings representing the header field names.
      void recycle()
      Clears all header fields.
      void removeHeader​(java.lang.String name)
      Removes a header field with the specified name.
      void removeHeader​(java.lang.String name, java.lang.String str)
      Removes the headers with the given name whose values contain the given string.
      void removeHeader​(Header header)  
      void removeHeaderMatches​(java.lang.String name, java.lang.String regex)
      Removes the headers with the given name whose values contain the given string.
      void removeHeaderMatches​(Header header, java.lang.String regex)
      Removes the headers with the given name whose values contain the given string.
      void setMaxNumHeaders​(int maxNumHeaders)  
      boolean setSerialized​(int n, boolean newValue)
      Set the header's "serialized" flag.
      DataChunk setValue​(java.lang.String name)
      Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
      DataChunk setValue​(Header header)
      Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
      int size()
      Returns the current number of header fields.
      java.lang.String toString()
      EXPENSIVE!!!
      java.lang.Iterable<java.lang.String> trailerNames()  
      int trailerSize()  
      java.lang.Iterable<java.lang.String> trailerValues​(java.lang.String name)  
      java.lang.Iterable<java.lang.String> trailerValues​(Header name)  
      java.lang.Iterable<java.lang.String> values​(java.lang.String name)  
      java.lang.Iterable<java.lang.String> values​(Header name)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • MAX_NUM_HEADERS_UNBOUNDED

        public static final int MAX_NUM_HEADERS_UNBOUNDED
        See Also:
        Constant Field Values
      • MAX_NUM_HEADERS_DEFAULT

        public static final int MAX_NUM_HEADERS_DEFAULT
        See Also:
        Constant Field Values
      • 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
      • NOOP_CHUNK

        public static DataChunk NOOP_CHUNK
      • mark

        protected int mark
    • Constructor Detail

      • MimeHeaders

        public MimeHeaders()
        Creates a new MimeHeaders object using a default buffer size.
    • Method Detail

      • mark

        public void mark()
      • recycle

        public void recycle()
        Clears all header fields.
      • clear

        public void clear()
        Clears all header fields.
      • toString

        public java.lang.String toString()
        EXPENSIVE!!! only for debugging.
        Overrides:
        toString in class java.lang.Object
      • copyFrom

        public void copyFrom​(MimeHeaders source)
      • size

        public int size()
        Returns the current number of header fields.
      • trailerSize

        public int trailerSize()
      • getName

        public DataChunk getName​(int n)
        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 DataChunk getValue​(int n)
        Returns the Nth header value, or null if there is no such header. This may be used to iterate through all header fields.
      • isSerialized

        public boolean isSerialized​(int n)
        Get the header's "serialized" flag.
        Parameters:
        n - the header index
        Returns:
        the header's "serialized" flag value.
      • setSerialized

        public boolean setSerialized​(int n,
                                     boolean newValue)
        Set the header's "serialized" flag.
        Parameters:
        n - the header index
        newValue - the new value
        Returns:
        the old header "serialized" flag value.
      • indexOf

        public int indexOf​(java.lang.String name,
                           int fromIndex)
        Find the index of a header with the given name.
      • indexOf

        public int indexOf​(Header header,
                           int fromIndex)
        Find the index of a header with the given name.
      • contains

        public boolean contains​(Header header)
      • contains

        public boolean contains​(java.lang.String header)
      • names

        public java.lang.Iterable<java.lang.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.
      • trailerNames

        public java.lang.Iterable<java.lang.String> trailerNames()
      • values

        public java.lang.Iterable<java.lang.String> values​(java.lang.String name)
      • values

        public java.lang.Iterable<java.lang.String> values​(Header name)
      • trailerValues

        public java.lang.Iterable<java.lang.String> trailerValues​(java.lang.String name)
      • trailerValues

        public java.lang.Iterable<java.lang.String> trailerValues​(Header name)
      • addValue

        public DataChunk addValue​(java.lang.String name)
        Create a new named header , return the MessageBytes container for the new value
      • addValue

        public DataChunk addValue​(Header header)
        Create a new named header , return the MessageBytes container for the new value
      • addValue

        public DataChunk addValue​(byte[] buffer,
                                  int startN,
                                  int len)
        Create a new named header using un-translated byte[]. The conversion to chars can be delayed until encoding is known.
      • addValue

        public DataChunk addValue​(Buffer buffer,
                                  int startN,
                                  int len)
        Create a new named header using un-translated Buffer. The conversion to chars can be delayed until encoding is known.
      • setValue

        public DataChunk setValue​(java.lang.String name)
        Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
      • setValue

        public DataChunk setValue​(Header header)
        Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
      • getValue

        public DataChunk getValue​(java.lang.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.
      • getValue

        public DataChunk getValue​(Header header)
        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.
      • getHeader

        public java.lang.String getHeader​(java.lang.String name)
      • getHeader

        public java.lang.String getHeader​(Header header)
      • removeHeader

        public void removeHeader​(java.lang.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
      • removeHeader

        public void removeHeader​(Header header)
      • removeHeader

        public void removeHeader​(java.lang.String name,
                                 java.lang.String str)
        Removes the headers with the given name whose values contain the given string.
        Parameters:
        name - The name of the headers to be removed
        str - The string to check the header values against
      • removeHeaderMatches

        public void removeHeaderMatches​(java.lang.String name,
                                        java.lang.String regex)
        Removes the headers with the given name whose values contain the given string.
        Parameters:
        name - The name of the headers to be removed
        regex - The regex string to check the header values against
      • removeHeaderMatches

        public void removeHeaderMatches​(Header header,
                                        java.lang.String regex)
        Removes the headers with the given name whose values contain the given string.
        Parameters:
        header - The name of the Headers to be removed
        regex - The regex string to check the header values against
      • setMaxNumHeaders

        public void setMaxNumHeaders​(int maxNumHeaders)
      • getMaxNumHeaders

        public int getMaxNumHeaders()