In this case, the purpose of the buffer is just to make the read asynchronous. Buffer objects are general purpose memory storage blocks allocated by Open GL. To give the implementation great flexibility in exactly what a particular buffer object's data store will be, so as to better optimize performance, the user is required to give usage hints.
Image reading buffers: Through Pixel Buffer Objects, it is possible to use a buffer as an intermediary for asynchronous pixel transfer operations.
One way is for the user to explicitly upload some binary data.
The other way is for the user to issue GL commands that cause the buffer to be filled in.
The contents of the buffer are written by Compute Shaders, Transform Feedback, or various other mechanisms.
And other Open GL processes read from them, such as via Indirect Rendering, Vertex Specification, and so forth.
You can clear the buffer after allocation if you wish to update it.