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

- Interface Summary
  Interface | Description
  --- | ---
  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.
  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.
  StringUtils.Function<T> |

- Class Summary
  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[].
  C2BConverter | NIO based character encoder.
  CharChunk | Utilities to manipulate char chunks.
  CharsetCache |
  CharsetUtil |
  Constants | String constants for the file package.
  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 an UTF-8 encoder.
  UriUtil | Utility class for working with URIs and URLs.
  Utf8Decoder | Decodes bytes to UTF-8.
  Utf8Encoder | Encodes characters as bytes using UTF-8.

- Enum Summary
  Enum | Description
  --- | ---
  EncodedSolidusHandling |
  UEncoder.SafeCharsSet |

- Exception Summary
  Exception | Description
  --- | ---
  ByteChunk.BufferOverflowException |