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