Что за страности в Stream в.NET?
ReadByte возвращает тип int, т.к. при достижении конца будет возвращено значение минус один. А тип byte может иметь значение в диапазоне от нуля до 255. То есть, считывая байты, сообщить о достижении конца потока при помощи типа byte невозможно (байт, имеющий значение ноль может быть полезным байтом), поэтому используется тип int.
Метод Read принимает буфер, в который будут помещены считанные данные. Буфер - это массив байт. Изначально он должен быть пустым. Размер массива - по своему смотрению. Чем больше размер буфера, тем больше данных будет помещено в память, меньше проделано операций.
Метод Read  возвращает число помещенных в буфер байт. Ноль - достигнут конец потока.FileInfo f = new FileInfo(@"C:\example.dat");
using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
 using (BinaryReader br = new BinaryReader(fs))
 {
   int bytesRead = 0;
   byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
   StringBuilder result = new StringBuilder();
   while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
   {
     // из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
   }
 }
}
Массивы являются ссылочными типами и нет необходимости использовать out.
> Выводя этот int на консоль, я что-то не заметил восьмеричной системы счисления.
А почему должны были? Значение числа оно всегда одинаково и не зависит от системы счисление. А вот его отображение может меняться. Можно даже пальцами показать, или узелками на веревке.
> Во-вторых для чего Read() первым параметром получает массив байтов? Что должно быть в этом массиве? Что метод делает с этим массивом? Ни in ни out перед аргументом нет.
Наверное следовало бы изучить для начала C# и понять, что такое ссылочный тип.