Uso un MemoryStream.
Imports System.IO
Module Module1
Dim corrente As New MemoryStream
Dim sorgente() As Byte = {1, 2, 3, 4, 5}
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As Integer
corrente.Position = 1
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
End Module
Ho scritto sullo stream prelevando da una matrice di bytes.In blocco. Quindi ho usato Write.
Write accetta come parametri la matrice da cui leggere, la posizione iniziale e la quantità di bytes. Legge solo da una matrice di bytes.
Per la lettura ho usato ReadByte che legge un byte alla volta.
Se invece avessi voluto leggere in blocco dentro una matrice di bytes, avrei dovuto usare Read.
Seguendo un esempio visto in rete, ho usato il tipo Integer per la variabile result in cui leggere il byte.
Ma potrei usare anche un tipo Byte?
Imports System.IO
Module Module1
Dim corrente As New MemoryStream
Dim sorgente() As Byte = {1, 2, 3, 4, 5}
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As Byte
corrente.Position = 1
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
End Module
Sì, ottengo sempre risultati pertinenti.Ho ottenuto un errore, prima, usando il tipo Byte in questo modo:
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As Byte
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
Il tipo di errore era questo:
Eccezione first-chance di tipo 'System.OverflowException' in Streams.exeche, usando un tipo Integar, non veniva più segnalato:
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As Integer
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
ottenendo però questo risultato:
-1Il problema era che non avevo reimpostato la posizione di lettura dell'oggetto MemoryStream, per cui la posizione, una volta effettuata la scrittura, restava impostata sull'ultimo byte, e il valore successivo era -1, che non può essere rappresentato in un tipo Byte, che è senza segno.
Invece il tipo Integer può rappresentare i numeri negativi:
1111 1111 1111 1111 1111 1111 1111 1111dovrebbe essere la rappresentazione di -1 in un tipo Integer.
Usando un tipo che non può essere con segno, invece, ottengo un errore.
La riprova di questo la ottengo usando un tipo Integer senza segno:
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As UInt32
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
Ed ottengo sempre:
Eccezione first-chance di tipo 'System.OverflowException' in Streams.execome volevasi dimostrare.
Il fatto che ottengo -1 è dovuto al fatto che non ho resettato la posizione.
Rimedio subito e posso usare anche Byte (o anche Uint32):
Sub Main()
corrente.Write(sorgente, 0, 3)
Dim result As Byte
corrente.Position = 1
result = corrente.ReadByte()
Console.WriteLine(result)
Console.ReadKey()
End Sub
Ed ecco:
2Okay!
Nessun commento:
Posta un commento