When is block-buffered input passed on? Does it mirrors the rules governing block-buffered output? Since you can't flush an input buffer (the result is undefined) is it only passed on when it is filled?
When the stream is closed or the OS buffer is full. Alternatively, when the process writing to the input stream calls flush. If you do not want to wait for the buffer to flush, consider referring to >>3.