Extraire le contenu binaire d'un fichier vers une chaine de caracteres

Extraire le contenu binaire d'un fichier vers une chaine de caracteres - Java - Programmation

Marsh Posté le 10-02-2004 à 18:37:50    

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:///E:/Documents%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 :)

Reply

Marsh Posté le 10-02-2004 à 18:37:50   

Reply

Marsh Posté le 10-02-2004 à 18:41:43    

met ton code entre [ cpp ] [ /cpp ]

Reply

Marsh Posté le 10-02-2004 à 18:48:22    

le gros problême de ton code est cette ligne là :  
  total = total + Integer.toBinaryString(unsignedB[i]);  
 
utilise un StringBuffer pour concaténer, tu vas voir que les perfs vont "sensiblement" augmenter ;)
 
sinon, la bonne solution et de lire le flux par bloc et de passer ces blocs à un encoder Base64 (ex : http://jakarta.apache.org/commons/ [...] se64.html) et de copier le bloc encodé dans un buffer (StringBuffer ou flux de sortie en fonction du besoin)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed