Deklarujete pole bajtů (Dokument1 As Byte()), ale získáváte pouze jeden bajt z readeru: reader.GetByte(x). Potřebujete buď získat celé pole bajtů pomocí GetBytes() tak, aby seděly datové typy (pole a pole, ne pole a typ) a nebo můžete použít GetStream a číst si ze zdroje podle potřeby.
Dim length = reader.GetBytes(7, 0, Nothing, 0, 0) ' *
Dim buffer(length) As Byte
reader.GetBytes(7, 0, buffer, 0, length)
' nebo
Dim stream = reader.GetStream(7)
Using reader2 = New System.IO.StreamReader()
MessageBox.Show(reader2.ReadToEnd())
End Using
Upozorňuji, že pokud budou data objemná, určitě se vyplatí je číst postupně a nekopírovat do bufferu vše naráz. Může to vypadat třeba takto:
Dim buffer(2048) As Byte ' 2kb buffer
Dim index = 0 ' pozice ve zdrojových datech
Dim read = reader.GetBytes(7, index, buffer, 0, buffer.Length)
While read > 0
' zpracování 2kb dat a pokračování na další 2kb
' zde lze třeba sekvenčně zapisovat do souboru a pod
' pokud chcete deserializovat data např. do obrázku,
' vyplatí se použít GetStream a přetížený konstruktor pro
' obrázek, jež daný stream vezme jako parametr
index += read
read = reader.GetBytes(7, index, buffer, 0, buffer.Length)
End While
* http://msdn.microsoft.com/en-us/library/... "If you pass a buffer that is null, GetBytes returns the length of the field in bytes."
|