Package org.apache.tomcat.util.buf

## Class MessageBytes

- java.lang.Object
- - org.apache.tomcat.util.buf.MessageBytes

All Implemented Interfaces:
  `java.io.Serializable`, `java.lang.Cloneable`

    public final class MessageBytes
    extends java.lang.Object
    implements java.lang.Cloneable, java.io.Serializable

This class is used to represent a subarray of bytes in an HTTP message. It represents all request/response elements. The byte/char conversions are delayed and cached. Everything is recyclable. The object can represent a byte[], a char[], or a (sub) String. All operations can be made in case sensitive mode or not.

Author:
  dac@eng.sun.com, James Todd [gonzo@eng.sun.com], Costin Manolache
See Also:
  Serialized Form

### Field Summary

Fields
`static char[]` `EMPTY_CHAR_ARRAY`
`static int` `T_BYTES` getType() is T_BYTES if the the object used to create the MessageBytes was a byte[]
`static int` `T_CHARS` getType() is T_CHARS if the the object used to create the MessageBytes was a char[]
`static int` `T_NULL`
`static int` `T_STR` getType() is T_STR if the the object used to create the MessageBytes was a String

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`java.lang.Object` `clone()`
`void` `duplicate​(MessageBytes src)` Copy the src into this MessageBytes, allocating more space if needed.
`boolean` `equals​(java.lang.Object obj)`
`boolean` `equals​(java.lang.String s)` Compares the message bytes to the specified String object.
`boolean` `equals​(MessageBytes mb)`
`boolean` `equalsIgnoreCase​(java.lang.String s)` Compares the message bytes to the specified String object.
`ByteChunk` `getByteChunk()` Returns the byte chunk, representing the byte[] and offset/length.
`CharChunk` `getCharChunk()` Returns the char chunk, representing the char[] and offset/length.
`java.nio.charset.Charset` `getCharset()`
`int` `getLength()` Returns the length of the original buffer.
`long` `getLong()` Convert the buffer to an long, cache the value.
`java.lang.String` `getString()` Returns the string value.
`int` `getType()` Return the type of the original content.
`int` `hashCode()`
`int` `indexOf​(java.lang.String s)`
`int` `indexOf​(java.lang.String s, int starting)`
`int` `indexOfIgnoreCase​(java.lang.String s, int starting)`
`boolean` `isNull()`
`static MessageBytes` `newInstance()` Construct a new MessageBytes instance.
`void` `recycle()` Resets the message bytes to an uninitialized (NULL) state.
`void` `setBytes​(byte[] b, int off, int len)` Sets the content to the specified subarray of bytes.
`void` `setChars​(char[] c, int off, int len)` Sets the content to be a char[]
`void` `setCharset​(java.nio.charset.Charset charset)` Set the Charset used for string<->byte conversions.
`void` `setLong​(long l)` Set the buffer to the representation of a long.
`void` `setString​(java.lang.String s)` Set the content to be a string
`boolean` `startsWithIgnoreCase​(java.lang.String s, int pos)`
`void` `toBytes()` Convert to bytes and fill the ByteChunk with the converted value.
`void` `toChars()` Convert to char[] and fill the CharChunk.
`java.lang.String` `toString()` Compute the string value.

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

`finalize, getClass, notify, notifyAll, wait, wait, wait`

### Field Detail

#### T_NULL

    public static final int T_NULL

See Also:
  Constant Field Values

#### T_STR

    public static final int T_STR

getType() is T_STR if the the object used to create the MessageBytes was a String

See Also:
  Constant Field Values

#### T_BYTES

    public static final int T_BYTES

getType() is T_BYTES if the the object used to create the MessageBytes was a byte[]

See Also:
  Constant Field Values

#### T_CHARS

    public static final int T_CHARS

getType() is T_CHARS if the the object used to create the MessageBytes was a char[]

See Also:
  Constant Field Values

#### EMPTY_CHAR_ARRAY

    public static final char[] EMPTY_CHAR_ARRAY

### Method Detail

#### newInstance

    public static MessageBytes newInstance()

Construct a new MessageBytes instance.

Returns:
  the instance

#### clone

    public java.lang.Object clone()
                           throws java.lang.CloneNotSupportedException

Overrides:
  `clone` in class `java.lang.Object`
Throws:
  `java.lang.CloneNotSupportedException`

#### isNull

    public boolean isNull()

#### recycle

    public void recycle()

Resets the message bytes to an uninitialized (NULL) state.

#### setBytes

    public void setBytes​(byte[] b,
                         int off,
                         int len)

Sets the content to the specified subarray of bytes.

Parameters:
  `b` - the bytes
  `off` - the start offset of the bytes
  `len` - the length of the bytes

#### setChars

    public void setChars​(char[] c,
                         int off,
                         int len)

Sets the content to be a char[]

Parameters:
  `c` - the chars
  `off` - the start offset of the chars
  `len` - the length of the chars

#### setString

    public void setString​(java.lang.String s)

Set the content to be a string

Parameters:
  `s` - The string

#### toString

    public java.lang.String toString()

Compute the string value.

Overrides:
  `toString` in class `java.lang.Object`
Returns:
  the string

#### getType

    public int getType()

Return the type of the original content. Can be T_STR, T_BYTES, T_CHARS or T_NULL

Returns:
  the type

#### getByteChunk

    public ByteChunk getByteChunk()

Returns the byte chunk, representing the byte[] and offset/length. Valid only if T_BYTES or after a conversion was made.

Returns:
  the byte chunk

#### getCharChunk

    public CharChunk getCharChunk()

Returns the char chunk, representing the char[] and offset/length. Valid only if T_CHARS or after a conversion was made.

Returns:
  the char chunk

#### getString

    public java.lang.String getString()

Returns the string value. Valid only if T_STR or after a conversion was made.

Returns:
  the string

#### getCharset

    public java.nio.charset.Charset getCharset()

Returns:
  the Charset used for string<->byte conversions.

#### setCharset

    public void setCharset​(java.nio.charset.Charset charset)

Set the Charset used for string<->byte conversions.

Parameters:
  `charset` - The charset

#### toBytes

    public void toBytes()

Convert to bytes and fill the ByteChunk with the converted value.

#### toChars

    public void toChars()

Convert to char[] and fill the CharChunk. Note: The conversion from bytes is not optimised - it converts to String first. However, Tomcat doesn't call this method to convert from bytes so there is no benefit from optimising that path.

#### getLength

    public int getLength()

Returns the length of the original buffer. Note that the length in bytes may be different from the length in chars.

Returns:
  the length

#### equals

    public boolean equals​(java.lang.String s)

Compares the message bytes to the specified String object.

Parameters:
  `s` - the String to compare
Returns:
  `true` if the comparison succeeded, `false` otherwise

#### equalsIgnoreCase

    public boolean equalsIgnoreCase​(java.lang.String s)

Compares the message bytes to the specified String object.

Parameters:
  `s` - the String to compare
Returns:
  `true` if the comparison succeeded, `false` otherwise

#### equals

    public boolean equals​(java.lang.Object obj)

Overrides:
  `equals` in class `java.lang.Object`

#### equals

    public boolean equals​(MessageBytes mb)

#### startsWithIgnoreCase

    public boolean startsWithIgnoreCase​(java.lang.String s,
                                        int pos)

Parameters:
  `s` - the string
  `pos` - The start position
Returns:
  `true` if the message bytes starts with the specified string.

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `java.lang.Object`

#### indexOf

    public int indexOf​(java.lang.String s,
                       int starting)

#### indexOf

    public int indexOf​(java.lang.String s)

#### indexOfIgnoreCase

    public int indexOfIgnoreCase​(java.lang.String s,
                                 int starting)

#### duplicate

    public void duplicate​(MessageBytes src)
                   throws java.io.IOException

Copy the src into this MessageBytes, allocating more space if needed.

Parameters:
  `src` - The source
Throws:
  `java.io.IOException` - Writing overflow data to the output channel failed

#### setLong

    public void setLong​(long l)

Set the buffer to the representation of a long.

Parameters:
  `l` - The long

#### getLong

    public long getLong()

Convert the buffer to an long, cache the value.

Returns:
  the long value