Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Don Benatti

Um pouco sobre bytes e lendo arquivos grandes

Recommended Posts

Pessoal, gostaria de falar neste post sobre uma coisa bem bacana que são os bytes e como utilizá-los em uma leitura de arquivo.

 

Java nos permite trabalhar com bytes colocando a mão diretamente neles e os usando como desejarmos, em linguagens simplificadas, isso é ocultado e tudo se faz no escuro, apenas retornando algo.

 

Veja como é fácil criar um array de bytes e determinar previamente o tamanho

byte[] bytes = new byte[1024];

Lembram da famosa função strlen do php? Para treinarmos o uso de bytes em Java, vamos reinventar a roda apenas para fins de estudo, poderemos contar os bytes como contamos o numero de elementos em um array normal.

byte[] bytes = "imasters".getBytes();
System.out.println(bytes.length); // 8

Em uma situação real use String.length();

 

Copiando um grande arquivo e lendo uma determinada quantidade de bytes por vez.

 

Para isso utilizaremos:

 

java.io.BufferedInputStream

java.io.BufferedOutputStream

java.io.FileInputStream

java.io.FileOutputStream

 

Exceções:

java.io.IOException

 

Procura ai aquele filme de quase 2gb ou o instalador de um jogo super pesado e vamos copiá-lo:

String largeFile = "/path/to/...",
        largeFileCopy = "/path/to/...";

// Criamos um array para 4096 bytes, determina o quanto será lido
byte[] bytes = new byte[4096];

BufferedInputStream input = null;
BufferedOutputStream output = null;

try {
    // Java I/O;
    input = new BufferedInputStream(new FileInputStream(largeFile));
    output = new BufferedOutputStream(new FileOutputStream(largeFileCopy));
    
    int read = 0;
    
    while ((read = input.read(bytes)) != -1) {
        output.write(bytes, 0, read);
    }
}
catch (IOException e) {
    e.printStackTrace();
}
finally {
    if (output != null) {
        try {
            output.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (input != null) {
        try {
            input.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Façam seus testes, se desejarem, postem os resultados ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.