The transport layer abstraction of the HTTP components. This layer is used to transfer messages over sockets. Sockets are always created through a {@link org.apache.http.io.SocketFactory factory}. You can provide factories to create plain sockets, {@link org.apache.http.io.SecureSocketFactory secure} sockets based on SSL/TLS, sockets that connect over SOCKS hosts, sockets that implement bandwidth throttling, or whatever else you might think of.
The data {@link org.apache.http.io.HttpDataTransmitter transmitter} and {@link org.apache.http.io.HttpDataReceiver receiver} interfaces with the respective factories provide an abstraction from java.io and java.nio. These interfaces are adapted to the plain {@link org.apache.http.io.HttpDataOutputStream output} and {@link org.apache.http.io.HttpDataInputStream input} streams used in the {@link org.apache.http core API}.
There are implementations of the transport encodings used by HTTP, in particular the chunked encoding for {@link org.apache.http.io.ChunkedOutputStream sending} and {@link org.apache.http.io.ChunkedInputStream receiving} entities. The helper classes for resizable {@link org.apache.http.io.ByteArrayBuffer byte} and {@link org.apache.http.io.CharArrayBuffer char} arrays might be useful elsewhere, too.