Dans le cadre d'un projet, je travaille sur une class permettant d'encoder un ficher à l'aide du protocol base64
La classe que j'ai faite fonctionne, mais pose de gros problème de temps.
Pour pouvoir encoder à l'aide de cet algorithme, je dois extraire les bits d'un fichier et si possible les copier vers une chaine de caractere. La méthode que j'utilise consiste à :
/*
Créer une instance de la class URL avec en argumant le chemin vers mon fichier :
*/
URL url = new URL("file:///EDocuments%20and%20Settings/Xavier/Bureau/hexview.zip" );
/*
Ensuite, j'utilise la méthode openStream de la classe URL qui permet d'obtenir une instance InputStream pointant vers mon fichier
*/
InputStream is = url.openStream();
/*
Ensuite, j'utilise la méthode read de la classe InputStream qui me permet de copier l'ensemble des octets du fichier dans un buffer :
*/
byte b[] = new byte[is.available()];
/*
Le type byte étant forcément signé, je copie le contenu de mon tableau dans un autre tableau de type int, et fais une opération dans le but d'avoir la valeur de mes octets non signés
*/
int unsignedB[] = new int [b.length];
String s;
String total = "";
/*
Je converti chaque octet signé en octet non signé (en utilisant le type int), puis je copie la valeur correspondante convertie en binaire dans ma chaine de caractere
*/
for (int i = 0; i < b.length; i++) {
unsignedB[i] = b[i] & 0xFF;
total = total + Integer.toBinaryString(unsignedB[i]);
}
Voila, ma chaine de caractere total contient le contenu de mon fichier en binaire. Seulement voila, cette méthode est extremement lente et est quasiment inutilisable lorsque les fichiers font plus de 10 ko.
Avez vous donc, une idée sur une méthode alternative ?
Merci pour toute aide