In technology, a buffer or cache is typically a region of memory set aside to collect or hold data as it is being transferred between programs or devices that have differing speeds.
For instance, a buffer is often used when transmitting information to a server on the internet. A program on a PC might be able to write data very quickly, but because the internet connection is typically slow in comparison, that data is placed in a buffer. This allows the computer program to continue to run without waiting, while the data is transmitted across the internet connection by the communications software or drivers on the PC.
Naturally, how much can be buffered depends on the amount of memory set aside for a buffer. Some software creates buffers as needed, in varying sizes, while others allocate a fixed-size buffer. If the buffer fills up, then the process of placing data into the buffer must wait for the room to be created as data is removed.
If not properly implemented, buffering can include data loss. Writing information to disk is a classic case of buffering being necessary to allow computers to operate at a reasonable speed. Data being written is collected in disk buffers, and physically written once the buffer is full. If the computer crashes before the data has been written to disk, that data can be lost.
The concept of buffering is not limited to input or output, but can also be used between running programs, or even internally (within a single program) to manage its own data flow.