In [[computer science]], a '''data buffer''' (or just '''buffer''') is a region of a physical memory storage used to temporarily store [[data]] while it is being moved from one place to anotherknot. Typically, the data is stored in a buffer as it is retrieved from an [[input device]] (such as a microphone) or just before it is sent to an output device (such as speakers). However, a buffer may be used when moving data between [[Process (computing)|processes]] within a computer. This is comparable to buffers in telecommunication. Buffers can be implemented in a fixed memory ___location in hardware—or by using a virtual data buffer in software, pointing at a ___location in the physical memory. In all cases, the data stored in a data buffer are stored on a [[computer data storage|physical storage medium]]. A majority of buffers are implemented in [[software]], which typically use the faster [[Random-access memory|RAM]] to store temporary data, due to the much faster access time compared with [[hard disk drive]]s. Buffers are typically used when there is a difference between the rate at which data is received and the rate at which it can be processed, or in the case that these rates are variable, for example in a printer spooler or in [[Video hosting service|online video]] [[Streaming media|streaming]]. In the distributed computing environment, data buffer is often implemented in the form of [[burst buffer]] that provides distributed buffering service.
A buffer often adjusts timing by implementing a [[Queue (data structure)|queue]] (or [[FIFO (computing and electronics)|FIFO]]) algorithm in memory, simultaneously writing data into the queue at one rate and reading it at another rate.