VB .NET - Lendo e escrevendo em arquivos Binários - BinaryReader/BinaryWriter


 Neste artigo vou mostrar como ler e escrever em arquivos binários usando a linguagem VB .NET.

A classe BinaryReader, presente no namepasce System.IO, fornece métodos que simplificam a leitura de tipos de dados primitivos a partir de um stream. Por exemplo, você pode usar o método BinaryReader.ReadBoolean para ler o próximo byte como um valor booleano e avançar a posição atual no stream por um byte. A classe inclui métodos de leitura que suportam diferentes tipos de dados.

Quando você cria uma nova instância da classe BinaryReader, você fornece o stream para ler e, opcionalmente, especifica o tipo de codificação e se deseja deixar o stream aberto depois de descartar o objeto BinaryReader . Se você não especificar um tipo de codificação, o UTF-8 é usado.

O objeto BinaryReader funciona no nível mais baixo de Streams. sendo usado para ler tipos primitivos como valores binários em um fluxo de codificação específico. Ele funciona com objetos Streams que fornecem acesso aos bytes subjacentes.

Para criar um objeto BinaryReader, você deve primeiro criar um objeto FileStream e depois passar o BinaryReader para o método do construtor.

Exemplo:

Dim lerStream As FileStream
lerStream = New FileStream("
c:\teste.dat", FileMode.Open)
Dim lerBinary As New BinaryReader(lerStream)

Uma das principais vantagens em usar a informação binária é que ela armazena informação no formato binário sendo uma boa prática para segurança e utilização de espaço.

Para escrever tipos de dados primitivos no formato binário usamos a classe BinaryWriter também presente no namespace System.IO.

Assim, os dados do tipo primitivo podem ser gravados e lidos a partir de arquivos diretamente usando as classes BinaryWriter e BinaryReader. Você pode usar essas classes para criar seu próprio formato de arquivo binário para sua aplicação. Se você lida apenas com tipos primitivos, este é o melhor fluxo a ser usado.

Vejamos as seguir os principais recursos das classes BinaryReader e BinaryWriter :

A classe BinaryWriter expõe os seguintes membros.

Close() - Método é usado para fechar o BinaryWriter atual e o stream subjacente;
Write(Boolean) - Método usado para escrever um valor booleano de um byte para o stream atual;
Write(Byte) - Método usado para escrever um byte não assinado no stream atual avançando uma posição do fluxo por um byte;
Write(Char) - Método usado para escrever um caractere Unicode no stream atual avançando uma posição de acordo com a codificação usada e os caracteres que estão sendo gravados no stream;
Write(decimal) - Método usado para escrever um valor decimal no stream atual e avança a posição do fluxo em dezesseis bytes.
Write(Double) - Método usado para escrever um valor de ponto flutuante de oito bytes para o fluxo atual e avança a posição de fluxo em oito bytes.
Write(Int16) - Grava um inteiro assinado de dois bytes no stream atual e avança a posição do stream por dois bytes.
Write(Int32) - Grava um inteiro assinado de quatro bytes no stream atual e avança a posição do fluxo por quatro bytes.
Write(String) - Grava uma string de comprimento prefixado para o stream atual e avança a posição atual ;

A classe BinaryReader expõe os seguintes membros.

Close() - Fecha o objeto BinaryReader e o stream subjacente.
Read() - Lê os caracteres do stream subjacente e avança a posição atual do stream.
ReadBoolean() - Lê um valor booleano do stream atual e avança a posição atual do stream por um byte.
ReadByte() - Lê o próximo byte do stream atual e avança a posição atual do stream em um byte.
ReadBytes(int count) - Lê o número especificado de bytes do stream atual em uma matriz de bytes e avança a posição atual por esse número de bytes.
ReadChar() - Lê o próximo caractere do stream atual e avança a posição atual do stream de acordo com a codificação usada e o caracter específico que está sendo lido a partir do stream.
ReadChars(int count) - Lê o número especificado de caracteres do stream atual, retorna os dados em uma matriz de caracteres e avança a posição atual de acordo com a codificação usada e o caractere específico a ser lido a partir do stream.
ReadDouble() - Lê um valor de ponto flutuante de 8 bytes do stream atual e avança a posição atual do stream em oito bytes.
ReadInt32() - Lê um inteiro assinado de 4 bytes do stream atual e avança a posição atual do stream por quatro bytes.
ReadString() - Lê uma string do stream atual. A string é prefixada com o comprimento, codificado como um número inteiro de sete bits de cada vez

Vamos agora mostrar um exemplo básico de como usar essas classes.

Recursos Usados

Criando o projeto Console Application

Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual Basic e o template Windows Classic Desktop ->Console App(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome VBNET_BinaryReadWrite.

O exemplo a seguir mostra como criar um arquivo de configuração com algumas informações no formato binário e depois ler e exibir essas informações.

Inclua o código abaixo no arquivo Module1.vb :

 Imports System.IO
Module Module1
    Const nomeArquivo As String = "C:\dados\config\ConfigDemo.bin"
    Sub Main()
        GravarValoresPadrao()
        ExibirValores()
    End Sub
    Sub GravarValoresPadrao()
        Using writer As BinaryWriter = New BinaryWriter(File.Open(nomeArquivo, FileMode.Create))
            writer.Write("macoratti")
            writer.Write("numsey")
            writer.Write(0.25F)
            writer.Write("c:\dados\config")
            writer.Write(10)
            writer.Write(True)
        End Using
    End Sub
    Sub ExibirValores()
        Dim nomeUsuario As String
        Dim senhaUsuario As String
        Dim percentual As Single
        Dim pastaBackup As String
        Dim tempoEspera As Integer
        Dim exibirDados As Boolean
        If (File.Exists(nomeArquivo)) Then
            Using reader As BinaryReader = New BinaryReader(File.Open(nomeArquivo, FileMode.Open))
                nomeUsuario = reader.ReadString()
                senhaUsuario = reader.ReadString()
                percentual = reader.ReadSingle()
                pastaBackup = reader.ReadString()
                tempoEspera = reader.ReadInt32()
                exibirDados = reader.ReadBoolean()
            End Using
            Console.WriteLine("Nome do usuário    : " & nomeUsuario)
            Console.WriteLine("Senha do usuário   : " & senhaUsuario)
            Console.WriteLine("Percentual Multa   : " & percentual)
            Console.WriteLine("Pasta de Backup    : " & pastaBackup)
            Console.WriteLine("Tempo de Espera    : " & tempoEspera)
            Console.WriteLine("Exibe Configuracao : " & exibirDados)
        End If
    End Sub
End Module

Neste código fizemos o seguinte:

  • Definimos o local e nome do arquivo a ser gerado;

  • Gravamos os dados no arquivo usando a classe BinaryWriter e o método Write e suas sobrecargas;

  • Lemos o conteúdo do arquivo usando a classe BinaryReader usando os métodos para cada tipo de dado a ser obtido;

Executando o projeto iremos obter o seguinte resultado:

A seguir verificamos a pasta c:\dados\config contendo o arquivo ConfigDemo.bin e seu conteúdo exposto no editor de textos Sublime:

Observe que o contéudo esta no formato binário.

Pegue o projeto completo aqui :  Vbnet_BinaryReadWrite.zip

"Porque a lei foi dada por Moisés; a graça e a verdade vieram por Jesus Cristo." João 1:17

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti