C# - Fundamentos : Converter Stream para um Array de bytes
Na série C# Fundamentos vou abordar os conceitos básicos da linguagem C#. Hoje veremos como converter um Stream para um array de bytes. |
O que é
um Stream ?
Na linguagem C# você usa muitos tipos diferentes derivados de streams como
FileStream e MemoryStream. Porém o tipo Stream não é usado diretamente pois é
uma classe abstrata usada para streams derivados.
Assim, Stream é a classe base abstrata de todos os streams e fornece uma visão genérica
de um strings de bytes. O objeto Stream envolve três operações fundamentais:
Leitura, Escrita e Busca.
Em algumas situações, precisamos converter esses fluxos em um array de bytes.
Vamos ver como fazer isso.
1 - Usando os métodos Read, Write e ToArray
using System;
using System.IO;
using System.Text;
namespace CSharp_Erros1
{
class Program
{
static void Main(string[] args)
{
FileStream stream1 = File.Open("c:\\dados\\arquivo.txt", FileMode.Open);
byte[] buff = ConverteStreamToByteArray(stream1);
stream1.Close();
Console.WriteLine(Encoding.UTF8.GetString(buff, 0, buff.Length));
}
public static byte[] ConverteStreamToByteArray(Stream stream) { byte[] byteArray = new byte[16 * 1024]; using (MemoryStream mStream = new MemoryStream()) { int bit; while ((bit = stream.Read(byteArray, 0, byteArray.Length)) > 0) { mStream.Write(byteArray, 0, bit); } return mStream.ToArray(); } } } } |
O método Read do stream lê uma sequência de bytes do stream atual e avança a posição dentro do stream até o número de bytes lidos.
A seguir usa o método Write para gravar uma sequência de bytes no stream atual e avança a posição atual dentro desse stream até o número de bytes gravados.
Aqui o método MemoryStream.ToArray() escreve o conteúdo do stream em um array de bytes independente da propriedade Position.
2 - Usando os métodos CopyTo() e ToArray()
using System;
using System.IO;
using System.Text;
namespace CSharp_Erros1
{
class Program
{
static void Main(string[] args)
{
FileStream stream1 = File.Open("c:\\dados\\arquivo.txt", FileMode.Open);
byte[] buff = ConverteStreamToByteArray2(stream1);
stream1.Close();
Console.WriteLine(Encoding.UTF8.GetString(buff, 0, buff.Length));
}
public static byte[] ConverteStreamToByteArray2(Stream stream)
{
using (MemoryStream ms = new MemoryStream())
{
stream.CopyTo(ms);
return ms.ToArray();
}
}
}
}
|
O método CopyTo lê os bytes do stream atual, iniciando na posição atual, e os grava em outro stream.
Aqui o método MemoryStream.ToArray() atua da seguinte forma:
- Escreve o conteúdo do stream em um array de bytes
independente da propriedade Position.
- Omite os bytes não utilizados no MemoryStream do array. Para obter o
buffer inteiro, use o método GetBuffer.
- Retorna uma cópia do conteúdo do MemoryStream como um
array de
bytes. Se a instância atual foi construída em um array de bytes fornecido, uma
cópia da seção do array à qual essa instância tem acesso será retornada.
E estamos conversados...
"Vinde a mim, todos os
que estais cansados e oprimidos, e eu vos aliviarei."(disse Jesus)
Mateus 11:28
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Formatação de data e hora para uma cultura específica - Macoratti