Pergunta

Mostre -me os melhores/rápidos métodos para:

1) Carregando arquivos binários muito pequenos na memória. Por exemplo, ícones;

2) Carregando/lendo arquivos binários muito grandes do tamanho 512MB+. Talvez eu deva usar o IO mapeado pela memória?

3) Sua escolha comum quando você não deseja pensar em tamanho/velocidade, mas deve fazer apenas uma coisa: leia todos os bytes na memória?

Obrigada!!!

PS Desculpe por talvez uma pergunta trivial. Por favor, não feche;)

Ps2. Espelho de pergunta analógica para C#;

Foi útil?

Solução

Para arquivos mapeados de memória, o Java possui um pacote de nio: Arquivos mapeados de memória

Confira a classe Byte Stream para obter arquivos pequenos:Fluxo de bytes

Confira a E/S em buffer para arquivos maiores: Fluxo tamponado

Outras dicas

A maneira mais simples de ler um pequeno arquivo na memória é:

// Make a file object from the path name
File file=new File("mypath");
// Find the size
int size=file.length();
// Create a buffer big enough to hold the file
byte[] contents=new byte[size];
// Create an input stream from the file object
FileInputStream in=new FileInutStream(file);
// Read it all
in.read(contents);
// Close the file
in.close();

Na vida real, você precisaria de alguns blocos de tentativa/captura em caso de erros de E/S.

Se você está lendo um grande arquivo, sugiro fortemente não ler tudo na memória ao mesmo tempo, se puder ser evitado. Leia e processe em pedaços. É um aplicativo muito raro que realmente precisa manter um arquivo de 500 MB na memória de uma só vez.

Não existe uma E/S mapeada na memória em Java. Se é isso que você precisa fazer, você precisará criar uma matriz de bytes realmente grande.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top