Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Outra forma de resolver bytes repetidos

Legal saber que o método GetString() aceita mais parâmetros e blá-blá-blá, mas antes da resolução, eu usei essa lógica, já que o buffer só serve para armazenar 1KB e sempre o mesmo é totalmente reescrito desde que haja 1KB, então simplemente movi a criação do array pra dentro do while, pois para cada loop ele será vazio e assim não correr o risco de ter dados repetidos. Mas confesso que a solução apresentada no vídeo, pareceu mais "elegante", quanto a performance, para esse escopo de aplicação, acredito ter impacto irrelevante.

static void Main(string[] args)
{
    var enderecoDoArquivo = "contas.txt";

    using(var fluxoDoArquivo = new FileStream(enderecoDoArquivo, FileMode.Open))
    {
        var numeroDeBytesLidos = -1;

        //var buffer = new byte[1024]; // 1KB

        while (numeroDeBytesLidos != 0)
        {
            var buffer = new byte[1024];  // Criação do array aqui
            numeroDeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
            Escreverbuffer(buffer);
        }


        // public override int Read(byte[] array, int offset, int count);
    }

    Console.ReadLine();
}

static void Escreverbuffer(byte[] buffer)
{
    var utf8 = new UTF8Encoding();

    var texto = utf8.GetString(buffer);
    Console.Write(texto);

    //foreach (var meuByte in buffer)
    //{
    //    Console.Write(meuByte);
    //    Console.Write(" ");
    //}
}

Att.

1 resposta
solução!

Olá, Lucas! Tudo bem?

A sua solução para o problema de bytes repetidos é completamente válida e faz sentido. Ao mover a criação do array buffer para dentro do loop while, você garante que um novo array é criado a cada iteração, evitando assim a repetição de dados.

A solução apresentada na aula, que envolve passar o número de bytes lidos para o método EscreverBuffer e usar a sobrecarga do método GetString que aceita o índice inicial e a contagem de caracteres, é uma abordagem diferente que evita a criação de um novo array a cada iteração. Isso pode ser mais eficiente em termos de uso de memória, especialmente se o tamanho do buffer for grande.

No entanto, como você mencionou, a diferença de desempenho entre as duas abordagens provavelmente será insignificante para a maioria das aplicações. A escolha entre uma abordagem e outra pode depender de fatores como a clareza do código e as preferências pessoais do programador.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software