Opa, Rodrigo. Beleza?
Os argumentos para o método Read são:
- Buffer;
- Índice da posição inicial do buffer a ser usada;
- Quantidade de bytes a serem escritos no buffer;
Aquele 0 não é a posição do stream e sim a posição a ser usada no buffer - você poderia trocar por 10, por exemplo, e o buffer só seria utilizado a partir do índice 10 (mas, cuidado para não tentar usar mais bytes do que cabe no buffer, senão uma exceção será lançada).
Quando você chama o método Read, ele faz a leitura da quantidade de bytes que você pediu (ou menos, se chegou ao fim) e atualiza a posição automaticamente.
No curso, não utilizamos a propriedade Position, mas, você pode acompanhar a posição do stream imprimindo este valor na tela:
var quantidadeBytesLidos = -1;
while(quantidadeBytesLidos != 0)
{
quantidadeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
EscreverBuffer(buffer);
Console.WriteLine(fluxoDoArquivo.Position);
}