Buffers are allocated by various processes to use as input queues, etc. Most of the time, buffers are some processes' output, and they are file buffers. A simplistic explanation of buffers is that they allow processes to temporarily store input in memory until the process can deal with it.
Cache is typically frequently requested disk I/O. If multiple processes are
accessing the same files, much of those files will be cached to improve performance (RAM being so much faster than hard drives), it's disk cache.
In a word :
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.