2012-05-24 2 views
0

J'utilise InputStreamReader pour transférer des images compressées. InflaterInputStream est utilisé pour la décompression des imagesJava InputStreamReader & UTF-8 jeu de caractères

InputStreamReader infis = 
    new InputStreamReader(
     new InflaterInputStream(download.getInputStream()), "UTF8"); 
do { 
    buffer.append(" "); 
    buffer.append(infis.read()); 
} while((byte)buffer.charAt(buffer.length()-1) != -1); 

Mais tous les caractères non latins deviennent "?" et l'image est brisée http://s019.radikal.ru/i602/1205/7c/9df90800fba5.gif

Avec le transfert d'images non compressées j'utiliser BufferedReader et tout fonctionne bien

BufferedReader is = 
    new BufferedReader(
     new InputStreamReader(download.getInputStream())); 
+5

Les fichiers image sont généralement binaires, pourquoi les convertissez-vous en caractères? –

+0

Où puis-je les convertir? read() me donne les données incorrectes (octets 65533) – Dmitriy

+0

Il semble que vous les convertissiez quand vous dites 'buffer.append (" ")' – kentcdodds

Répondre

4

cours de lecture/écriture sont conçus pour fonctionner avec entrée/sortie textuelle (à base de caractères).

Les images compressées sont binaires et vous devez utiliser des classes InputStream/OutputStream ou nio pour le transfert de données binaires.

Un exemple utilisant InputStream/OutputStream est donné ci-dessous. Cet exemple stocke les données reçues dans un fichier local:

BufferedInputStream bis = null; 
    BufferedOutputStream bos = null; 
    try { 

     bis = new BufferedInputStream(download.getInputStream()); 
     bos = new BufferedOutputStream(new FileOutputStream("c:\\mylocalfile.gif")); 

     int i; 
     // read byte by byte until end of stream 
     while ((i = bis.read()) != -1) { 
      bos.write(i); 
     } 
    } finally { 
     if (bis != null) 
      try { 
       bis.close(); 
      } catch (IOException ioe) { 
       ioe.printStackTrace(); 
      } 
     if (bos != null) 
      try { 
       bos.close(); 
      } catch (IOException ioe) { 
       ioe.printStackTrace(); 
      } 
    } 
+0

Le transfert des images binaires non compressées fonctionne correctement – Dmitriy

+0

Quel est le format de votre image non compressée? –

+0

gif - http://s019.radikal.ru/i602/1205/7c/9df90800fba5.gif Tous les caractères brisés - 65533 – Dmitriy

Questions connexes