# Package org.apache.tomcat.util.buf

Buffers and Encodings This package contains buffers and utils to perform encoding/decoding of buffers.

See: Description

Interface Summary
Interface | Description
--- | ---
ByteChunk.ByteInputChannel | Input interface, used when the buffer is empty Same as java.nio.channel.ReadableByteChannel
ByteChunk.ByteOutputChannel | Same as java.nio.channel.WrittableByteChannel.
CharChunk.CharInputChannel |
CharChunk.CharOutputChannel | When we need more space we'll either grow the buffer ( up to the limit ) or send it to a channel.

Class Summary
Class | Description
--- | ---
Ascii | This class implements some basic ASCII character handling functions.
B2CConverter | NIO based character decoder.
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.
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.
MessageBytes.MessageBytesFactory |
StringCache | This class implements a String cache for ByteChunk and CharChunk.
StringCache.ByteEntry |
StringCache.CharEntry |
UDecoder | All URL decoding happens here.
UEncoder | Efficient implementation for encoders.
Utf8Decoder | Decodes bytes to UTF-8.
Utf8Encoder | Encodes characters as bytes using UTF-8.

## Package org.apache.tomcat.util.buf Description

# 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 a ISReader/OSWriter and keep everything allocated to do the conversions in any VM without any garbage.

This package must accomodate future extensions and additional converters ( most imporant: 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.