A FIFO is useful as a data-rate buffer between systems that transfer data at widely different rates. One example is the transfer of data from a computer to a printer. The computer sends character data to the printer at a very high rate, say, one byte every 10 us. These data fill up a FIFO memory in the printer, The printer then reads out the data from the FIFO at a much slower rate, say, one byte every 5 ms, and prints out the corresponding characters in the same order as sent by the computer.
A FIFO can also be used as a data-rate buffer between a slow device, such as a keyboard, and a high-speed computer. Here the FIFo accepts keyboard data at the slow and asynchronous rate of human fingers and stores them. The computer can then read all of the recently stored keystrokes very quickly at a convenient point in its program. In this way, the computer can be performing other tasks while the FlFO is slowly being filled with data.