MemoryStream
Da Gambas-it.org - Wikipedia.
La classe MemoryStream crea flussi che utilizzano la memoria, anziché un disco o una connessione di rete.
Con Gambas-3 non è più possibile usare un puntatore (Pointer) in uno stream. Si deve invece utilizzare uno stream di memoria con l'istruzione MEMORY.
Sintassi:
Flusso = MEMORY Puntatore FOR [ READ ] [ WRITE ]
- Se la parola chiave READ viene specificata, allora è permessa la lettura.
- Se la parola chiave WRITE viene specificata, allora è permessa la scrittura.
Esempio:
se si intende creare una sequenza di byte &h80, &h81, &h82, &h83, lo si può fare con i chr(); oppure si può scrivere:
Public Sub Button1_Click()
Dim p As Pointer
Dim pSt As Stream
Dim j as Integer
Dim by As Byte
p = Alloc(4) ' riserviamo 4 byte da qualche parte in memoria
pSt = Memory p For Write ' questa memoria sarà un flusso (stream) che creeremo appositamente, e...
'...nel quale andiamo a scrivere i 4 valori byte.
' Ogni valore byte occuperà la dimensione di 1 byte, quindi copriranno esattamente i 4 byte allocati:
Write #pSt, 80 As Byte
Write #pSt, 81 As Byte
Write #pSt, 82 As Byte
Write #pSt, 83 As Byte
' Ora, a fini didattici, andiamo a leggere il contenuto dello stream:
For j = 0 To 3 {1} ' Si comincia da byte n. 0, ossia dal 1° dei quattro.
Seek #pSt, j
Read #pSt, by
Print by
Next
End
In modalità "For Read" i Memory-Stream possono essere usati, ad esempio, per deferenziare i puntatori passati da funzioni esterne.
[modifica] Note
[1] Se non si vuole usare il ciclo FOR, si potrà scrivere il passaggio della lettura così:
Seek #pSt, 0 Read #pSt, by Read #pSt, by Read #pSt, by Read #pSt, by
Il puntatore interno farà avanzare di un byte (trattandosi di valori byte) alla volta la lettura del flusso di memoria allocato sino al quarto byte.

