IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Problème pour convertir un tableau de byte en un inputStream.


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut Problème pour convertir un tableau de byte en un inputStream.
    Bonjour à tous,

    Dans mon application (JSF) j'upload une archive ZIP (via un composant richfaces) qui me permet de récupérer l'archive sous forme d'un tableau de byte. Je veux ensuite le transformer en un inputStream.
    Après avoir cherché un peu, le code suivant me permet cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    byte[] contenuFichier = item.getData();
     
    		int taille = (int) item.getFileSize();
     
    		byte[] buf = new byte[taille];
    		ByteArrayInputStream bin = new ByteArrayInputStream(contenuFichier);
     
    		bin.read(buf);
     
    		InputStream in = new ByteArrayInputStream(buf) ; 
    		return in;
    Ensuite j'enregistre le inputStream sous forme d'un fichier (archive ZIP) avec la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    File file = new File(filePath);
    		if (file.exists()) {
    			throw new FichierExistantException(String.format("Le fichier '%s' existe déjà. Impossible de remplacer ce fichier.", filePath));
    		}
     
    		OutputStreamWriter writer = null;
    		BufferedReader reader = null;
    		try {
    			reader = new BufferedReader(new InputStreamReader(inputStreamContent));
     
    			file.createNewFile();
    			if (deleteOnExit) {
    				file.deleteOnExit();
    			}
    			writer = new OutputStreamWriter(new FileOutputStream(file));
     
    			String line = reader.readLine();
    			while (line != null) {
    				writer.append(line);
    				writer.append(PropertiesUtils.EOL);
     
    				line = reader.readLine();
    			}
     
    			writer.flush();
    		} catch (IOException e) {
    			throw new EcritureFichierException(String.format("Problème d'écriture dans le fichier '%s'.", filePath), e);
    		} finally {
    			// Close writer
    			if (writer != null) {
    				try {
    					writer.close();
    				} catch (IOException e) {
    					throw new EcritureFichierException(String.format("Problème de fermeture du fichier '%s'.", filePath), e);
    				}
    			}
     
    			// Close reader
    			if (reader != null) {
    				try {
    					reader.close();
    				} catch (IOException e) {
    					throw new EcritureFichierException(String.format("Problème de fermeture de l'input stream utilisé à l'écriture du fichier '%s'.",
    							filePath), e);
    				}
    			}
     
    		}
    Avec ce code, mon archive est bien crée, cependant elle n'est pas identique à celle uploadée, certains fichiers ne sont pas compréssés à l'identique, des fichiers sont donc corrompus....??
    Est-ce quelqu'un à une idée afin que je puisse faire cela svp ??

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 561
    Points : 21 624
    Points
    21 624
    Par défaut
    On n'utilise pas des Reader et des Writer quand on manipule des bytes. On utilise des InputStream et des OutputStream.

    Sinon, les caractères invalides vont être transformés en ? et autres bizarreries, et ton zip sera corrompu.

  3. #3
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut
    Merci beaucoup pour ta remarque, effectivement tu avais raison, mon zip n'est plus corrompu en ne manipulant que des streams.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème pour trier un tableau de hashage
    Par Jasmine80 dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2007, 13h02
  2. [Tableaux] Problème pour contrôler un tableau
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2006, 11h45
  3. [C#] Problème pour convertir .Color en .Brush
    Par pymouse dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/05/2005, 15h19
  4. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo