2010-11-22 4 views
0

S'il vous plaît montrez-moi les meilleures méthodes/rapide pour:Java chargement des fichiers binaires

1) chargement de très petits fichiers binaires en mémoire. Par exemple des icônes

2) Chargement/lecture de très gros fichiers binaires de taille 512Mb +. Peut-être que je dois utiliser IO mappé mémoire?

3) Votre choix commun lorsque vous ne voulez pas penser à la taille/vitesse, mais que vous ne devez rien faire: lire tous les octets en mémoire?

Merci!

P.S. Désolé pour la question peut-être triviale. Veuillez ne pas le fermer;)

P.S.2. Mirror de question analogique pour C#;

Répondre

2

Le la manière la plus simple de lire un petit fichier dans la mémoire est:

// 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(); 

Dans la vraie vie vous feriez besoin de quelques blocs try/catch en cas d'erreurs d'E/S.

Si vous lisez un gros fichier, je vous suggère fortement de ne pas tout lire dans la mémoire à la fois si cela peut être évité. Lisez-le et traitez-le en morceaux. C'est une application très rare qui a besoin de contenir un fichier de 500 Mo en une seule fois.

Il n'existe pas d'E/S mappées en mémoire en Java. Si c'est ce que vous devez faire, il vous suffira de créer un très gros tableau d'octets.

+1

lire n'est pas garanti pour lire tout à la fois. Je suggère d'utiliser DataIn DeputyStream.readFully(); –

+1

JDK 1.4 et versions ultérieures fournissent nio, et je pense que MappedByteBuffer devrait fonctionner comme des E/S mappées en mémoire. – secmask

+1

D'accord, je n'étais pas familier avec cette classe. Il ne s'agit pas vraiment d'E/S mappées en mémoire, du moins pas lorsque j'ai compris le terme dans mes jours pré-Windows où les ports d'E/S étaient mappés vers des emplacements de mémoire magiques. C'est plus comme des E/S mappées en réseau simulées. Mais peu importe. Si cela fonctionne pour vous, cool. – Jay

Questions connexes