Buffers and Channels
From my understanding, Buffers are created ti a certain data type (like a CharBuffer, or a ByteBuffer) and are used to store data and extract the data from it. It is used well with Channels because you can create a Charset to encode and then write the data from the channel to a byteBuffer. After doing that you translate the byteBuffer into a data type buffer like a charBuffer. This stores the data from the channel into a readable data in the charBuffer.