Java carregando arquivos binários
-
27-09-2019 - |
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#;
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.