There are a couple of oddities about Linux device nodes that need to be addressed. The first actually applies to all dialects of Unix and is related to the difference between a block device and a character device. The general misconception is that character devices are only read one character at a time. This is not the case.
Character devices differ from block devices in that they are read sequentially rather than randomly.
Hard drives are block devices because they can be accessed randomly, and terminals are character devices because they are accessed sequentially. One key advantage of the buffer cache is that the system can keep track of recently accessed blocks. Instead, the system simply passes the block from the buffer to the process. When writing back to a block device, the process is similar. The process thinks it is writing to the device, but is actually writing to the buffer cache.