Comment peut-on écrire un tableau d'octets dans un fichier (et le lire à partir de ce fichier) en Java?
Oui, nous le savons tous il y a déjà beaucoup de questions comme ça, mais ils deviennent très salissant et subjective en raison du fait qu'il y a de nombreuses façons d'accomplir cette tâche.
Donc, nous allons réduire la portée de la question:
Domaine:
- Android / Java
Ce que nous voulons:
- Rapide (autant que possible)
- Sans Bug (dans un rigidement manière méticuleuse)
Ce que nous ne sommes pas en train de faire:
- Les bibliothèques de tiers
- Les bibliothèques qui nécessitent l'API Android au plus tard le 23 (Guimauve)
(Donc, que les règles d' Apache Commons, Google Goyave, Java.nio, et nous laisse avec un bon ol' Java.io)
Ce dont nous avons besoin:
- Tableau d'octets est toujours exactement le même (contenu et format) après la traversée de l'écriture puis-processus de lecture
- La méthode d'écriture ne nécessite que deux arguments: fichier Fichier, et byte[] data
- Lire la méthode retourne un byte[] et ne nécessite qu'un seul argument: fichier Fichier
Dans mon cas particulier, ces méthodes sont privées (pas une bibliothèque) et ne sont PAS responsable de ce qui suit, (mais si vous voulez créer une solution universelle qui s'applique à un large public, y aller):
- Fil de sécurité (fichier ne sera pas consulté par plus d'un processus à la fois)
- Fichier null
- Fichier pointant vers inexistante emplacement
- Manque d'autorisations à l'emplacement du fichier
- Tableau d'octets en trop grandes
- Tableau d'octets nul
- Traiter avec des "index", "longueur" ou "ajouter" arguments/capacités
Donc... nous sommes un peu à la recherche de ce dernier à l'épreuve des balles de code que les gens dans l'avenir peut supposer, c'est sûr à utiliser car votre réponse a beaucoup de votes, et il n'y a pas les commentaires qui disent, "Qui peut se bloquer si..."
C'est ce que j'ai à ce jour:
Écrire Des Octets Dans Un Fichier:
private void writeBytesToFile(final File file, final byte[] data) {
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
}
Lire Des Octets À Partir D'Un Fichier:
private byte[] readBytesFromFile(final File file) {
RandomAccessFile raf;
byte[] bytesToReturn = new byte[(int) file.length()];
try {
raf = new RandomAccessFile(file, "r");
raf.readFully(bytesToReturn);
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
return bytesToReturn;
}
De ce que j'ai lu, les Exceptions possibles sont:
FileNotFoundException : ai-je raison que cela ne devrait pas se produire tant que le chemin d'accès au fichier fourni a été calculée en utilisant Android propres outils à l'interne et/ou si l'application a été testé correctement?
IOException : je ne sais pas vraiment ce qui a pu provoquer cela... mais je suppose qu'il n'y a pas moyen de contourner cela si il n'.
Donc, avec cela à l'esprit... ces méthodes être améliorés ou remplacés, et si oui, avec quoi?