Buscador

La clase StreamReader - II

Otro de los métodos de lectura es ReadBlock( ), que recibe como parámetro un array de tipo Char, sobre el que se depositarán una cierta cantidad de caracteres leídos del archivo. En el segundo parámetro de este método indicamos la posición del array desde la que se comenzarán a guardar los caracteres, y en el tercer parámetro, el número de caracteres a leer. El método Read( ) utilizado sin parámetros, devuelve un valor numérico correspondiente al código del carácter que se acaba de leer. Cuando tras sucesivas operaciones de lectura lleguemos al final del Stream, este método devolverá -1. 
Para convertir de nuevo a carácter los valores que devuelve Read( ), debemos pasarlos a un array de tipo Byte, y después, utilizando un objeto ASCIIEncoding, llamaremos a su método GetString( ), que convertirá el array en una cadena. Veamos unos ejemplos de estos métodos en el Código fuente 372. Observe el lector, que para poder utilizar en el programa un objeto ASCIIEnconding, debemos importar el espacio de nombres System.Text.

Imports System.IO
Imports System.Text
Module Module1
Sub Main()
' crear un Stream de lectura
Dim srLector As StreamReader = New StreamReader("\pruebas\NOTAS.txt")
' obtener valores del Stream con el método ReadBlock()
' ----------------------------------------------------
' crear un array Char que contendrá los caracteres leídos
Dim Caracteres(15) As Char
' leemos 16 caracteres del archivo y los pasamos al array
' comenzando a grabarlos a partir de su posición 0
srLector.ReadBlock(Caracteres, 0, 16)
' pasamos el array de valores Char a String mediante
' el constructor de la clase String que recibe como
' parámetro un array Char
Dim Parte1 As String = New String(Caracteres)
Console.WriteLine("Resultado de la lectura con ReadBlock()")
Console.WriteLine(Parte1)
Console.WriteLine()
' obtener valores del stream con el método Read()
' -----------------------------------------------
Dim Valor As Integer
Dim Codigos() As Byte
' vamos a ir volcando en un bucle los códigos de carácter
' leidos desde el archivo a un array Byte
Valor = srLector.Read()
While (Valor <> -1) ' cuando lleguemos al final, obtendremos -1
If Codigos Is Nothing Then
ReDim Codigos(0)
Else
ReDim Preserve Codigos(Codigos.GetUpperBound(0) + 1)
End If
Codigos(Codigos.GetUpperBound(0)) = Valor
Valor = srLector.Read()
End While
Dim Codificador As New ASCIIEncoding()
Dim Parte2 As String
' con el objeto ASCIIEncoding, método GetString(),
' obtenemos una cadena, pasando como parámetro un array
' de tipos Byte
Parte2 = Codificador.GetString(Codigos)
Console.WriteLine("Resultado de la lectura con ReadBlock()")
Console.WriteLine(Parte2)
Console.ReadLine()
End Sub
End Module
Código fuente 372

Finalmente, el método Peek( ), al igual que Read( ), devuelve el siguiente valor disponible del Stream, pero sin extraerlo del búfer, con lo que deberemos utilizar alguno de los métodos anteriormente descritos para realizar una lectura real.

No hay comentarios:

Publicar un comentario