# Class MessageBytes

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

All Implemented Interfaces:
  `Serializable`, `Cloneable`

public final class MessageBytes extends Object implements Cloneable, 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
Modifier and Type
Field
Description
`static final char[]`
`EMPTY_CHAR_ARRAY`
`static final int`
`T_BYTES`
getType() is T_BYTES if the the object used to create the MessageBytes was a byte[].
`static final int`
`T_CHARS`
getType() is T_CHARS if the the object used to create the MessageBytes was a char[].
`static final int`
`T_NULL`
`static final int`
`T_STR`
getType() is T_STR if the the object used to create the MessageBytes was a String.

## Method Summary

Modifier and Type
Method
Description
`Object`
`clone()`
`void`
`duplicate(MessageBytes src)`
Copy the src into this MessageBytes, allocating more space if needed.
`boolean`
`equals(Object obj)`
`boolean`
`equals(String s)`
Compares the message bytes to the specified String object.
`boolean`
`equals(MessageBytes mb)`
`boolean`
`equalsIgnoreCase(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.
`Charset`
`getCharset()`
`int`
`getLength()`
Returns the length of the original buffer.
`long`
`getLong()`
Convert the buffer to a long, cache the value.
`String`
`getString()`
Returns the string value.
`int`
`getType()`
Return the type of the original content.
`int`
`hashCode()`
`int`
`indexOf(String s)`
`int`
`indexOf(String s, int starting)`
`int`
`indexOfIgnoreCase(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(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(String s)`
Set the content to be a string
`boolean`
`startsWithIgnoreCase(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.
`String`
`toString()`
Compute the string value.
`String`
`toStringType()`
Convert to String (if not already of the String type) and then return the String value.

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

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

## Field Details

### 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 Details

### newInstance

public static MessageBytes newInstance()
Construct a new MessageBytes instance.

Returns:
  the instance

### clone

public Object clone() throws CloneNotSupportedException

Overrides:
  `clone` in class `Object`
Throws:
  `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(String s)
Set the content to be a string

Parameters:
  `s` - The string

### toString

public String toString()
Compute the string value.

Overrides:
  `toString` in class `Object`
Returns:
  the string

### toStringType

public String toStringType()
Convert to String (if not already of the String type) and then return the String value.

Returns:
  The current value as a 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 String getString()
Returns the string value. Valid only if T_STR or after a conversion was made.

Returns:
  the string

### getCharset

public Charset getCharset()

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

### setCharset

public void setCharset(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: The length in bytes may be different from the length in chars.

Returns:
  the length

### equals

public boolean equals(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(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(Object obj)

Overrides:
  `equals` in class `Object`

### equals

public boolean equals(MessageBytes mb)

### startsWithIgnoreCase

public boolean startsWithIgnoreCase(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 `Object`

### indexOf

public int indexOf(String s, int starting)

### indexOf

public int indexOf(String s)

### indexOfIgnoreCase

public int indexOfIgnoreCase(String s, int starting)

### duplicate

public void duplicate(MessageBytes src) throws IOException
Copy the src into this MessageBytes, allocating more space if needed.

Parameters:
  `src` - The source
Throws:
  `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 a long, cache the value. Used for headers conversion.

Returns:
  the long value