5.1. Why Do We Need This?5.2. Using Channels with Buffers5.3. Selectors5.4. Buffers in Detail5.4.1. Buffer Indices5.4.2. Buffer Creation5.4.3. Storing and Retrieving Data5.4.4. Preparing Buffers: clear(), flip(), and rewind()5.4.5. Compacting Data in a Buffer5.4.6. Buffer Perspectives: duplicate(), slice(), etc.5.4.7. Character Coding5.5. Stream (TCP) Channels in Detail5.6. Selectors in Detail5.6.1. Registering Interest in Channels5.6.2. Selecting and Identifying Ready Channels5.6.3. Channel Attachments5.6.4. Selectors in a Nutshell5.7. Datagram (UDP) Channels5.8. Exercises