My question is: why is the position value equal to 14?
StreamReader has "overread" to perform relatively few read operations on the underlying stream. Yes, this is due to the internal buffer - the idea is that it will perform “short” read operations in the base stream, often reading more than necessary to satisfy the current operation, thereby preventing many single-byte reads.
To read a line at a time without over reading it, it would have to read one byte at a time, which might even be more than one character. Depending on the implementation of the thread, this may be inefficient. Instead, it reads into the buffer, which is the hidden implementation part (you do not have direct access to the buffer), and then satisfies requests from this buffer until it is read from the stream again.
source share