# Package org.apache.tomcat.util.buf

package org.apache.tomcat.util.buf

## Buffers and Encodings

This package contains buffers and utils to perform encoding/decoding of buffers. That includes byte to char conversions, URL encodings, etc.

Encoding is a critical operation for performance. There are few tricks in this package - the C2B and B2C converters are caching an ISReader/OSWriter and keep everything allocated to do the conversions in any VM without any garbage.

This package must accommodate future extensions and additional converters ( most important: the nio.charset, which should be detected and used if available ). Also, we do have one hand-written UTF8Decoder, and other tuned encoders could be added.

My benchmarks ( I'm costin :-) show only small differences between C2B, B2C and hand-written codders/decoders, so UTF8Decoder may be disabled.

- Related Packages
  Package
  Description
  org.apache.tomcat.util
- Class
  Description
  AbstractChunk
  Base class for the *Chunk implementation to reduce duplication.
  Ascii
  This class implements some basic ASCII character handling functions.
  Asn1Parser
  This is a very basic ASN.1 parser that provides the limited functionality required by Tomcat.
  Asn1Writer
  B2CConverter
  NIO based character decoder.
  ByteBufferHolder
  Simple wrapper for a `ByteBuffer` that remembers if the buffer has been flipped or not.
  ByteBufferUtils
  ByteChunk
  This class is used to represent a chunk of bytes, and utilities to manipulate byte[].
  ByteChunk.BufferOverflowException
  ByteChunk.ByteInputChannel
  Input interface, used when the buffer is empty.
  ByteChunk.ByteOutputChannel
  When we need more space we'll either grow the buffer ( up to the limit ) or send it to a channel.
  C2BConverter
  NIO based character encoder.
  CharChunk
  Utilities to manipulate char chunks.
  CharChunk.CharInputChannel
  Input interface, used when the buffer is empty.
  CharChunk.CharOutputChannel
  When we need more space we'll either grow the buffer ( up to the limit ) or send it to a channel.
  CharsetCache
  CharsetUtil
  EncodedSolidusHandling
  HexUtils
  Tables useful when converting byte arrays to and from strings of hexadecimal digits.
  MessageBytes
  This class is used to represent a subarray of bytes in an HTTP message.
  StringCache
  This class implements a String cache for ByteChunk and CharChunk.
  StringUtils
  Utility methods to build a separated list from a given set (not java.util.Set) of inputs and return that list as a string or append it to an existing StringBuilder.
  UDecoder
  All URL decoding happens here.
  UEncoder
  Efficient implementation of a UTF-8 encoder.
  UEncoder.SafeCharsSet
  UriUtil
  Utility class for working with URIs and URLs.
  Utf8Decoder
  Decodes bytes to UTF-8.
  Utf8Encoder
  Encodes characters as bytes using UTF-8.