Building on another benefit of buffering from what JdJ said, it also allows you to manipulate the data in the buffer without having to go through and constantly do I/O stuff. You can read data from somewhere, it goes into the buffer, and now you can make your changes directly to the buffer, and when you are done, it is all flushed back to whatever storage the original data was held on. Much quicker than constantly accessing the file or database. Another reason for doing it this way is if you decide that you don't want the changes made in the buffer to actually be made to the data, you can just clear out the buffer, without having to go back and change the data back to its original state.
Of course, you still have the major drawback that JdJ mentioned. Since the buffer and whatever work your doing resides in memory, unless there is a log that is kept of the changes being made, if the system crashes, you have to start all over again.
Hope that gives a little more insight
Jason