Readメソッドで実際に読み込むことができたデータの長さは、戻り値によって知ることができます。 Streamから読み込めるデータが無くなった場合(すでにストリームの終端に達している場合)は、戻り値として0が返されます。 Readメソッドでの読み込みが成功した場合、読み込めたバイト数だけストリームの現在位置(Position)が移動します。

次の例は、用意したバッファがいっぱいになるまでReadメソッドで読み込みを行う例です。 このコードでは用意したバッファがいっぱいになるか、ストリームの終端に達するまで読み込みを続けます。

Readメソッドを使ってバッファがいっぱいになるか終端に達するまでStreamからデータを読み込む
Imports System
Imports System.IO

Class Sample
  Shared Sub Main()
    Using stream As Stream = File.OpenRead("sample.dat")
      Dim buffer(15) As Byte                ' 読み込んだデータを格納するためのバッファ
      Dim offset As Integer = 0             ' 読み込んだデータを格納する位置の初期値
      Dim count As Integer = buffer.Length  ' 読み込むバイト数の初期値

      Do
        ' 最大countバイト読み込み、bufferのインデックスoffset以降に格納する
        Dim len As Integer = stream.Read(buffer, offset, count)

        If len = 0 Then
          Exit Do ' これ以上読み込めるデータが無いので、読み込みを終了する
        Else
          offset += len ' 読み込めた長さの分だけ、次回のReadでバッファに格納する位置を移動する
          count -= len  ' 読み込めた長さの分だけ、次回のReadで読み込むバイト数を減らす
        End If
      Loop

      ' 実際に読み込めた分を表示する
      Console.WriteLine(BitConverter.ToString(buffer, 0, offset))
    End Using
  End Sub
End Class