2016-10-13 8 views
0

J'avais stocké l'image TIFF dans BFILE (oracle 10G). Je veux le lire de la base de données et créer l'image .tiff au répertoire local. (J'utilise JAI). Voici mon code où ImageIO.read() renvoie null. J'avais recherché ici mais je n'ai pas pu obtenir l'aide exacte sur lire le TIFF de la base de données et créer le fichier image de .tiff. Aidez-moi, s'il vous plaît.Créer une image TIFF stockée dans BFILE Oracle en utilisant JAI dans Java

+0

Ne pas utiliser ou 'ImageIO' IMA pour copier des fichiers, ils ne sont pas très bons. :-) Copiez simplement le contenu de 'inputStream' directement sur le disque. Voir par exemple [cette réponse] (http://stackoverflow.com/a/29005856/1428606) pour savoir comment copier un fichier octet par octet. – haraldK

Répondre

0

Comme mentionné dans mon commentaire, vous ne devriez pas utiliser JAI ou ImageIO pour copier des fichiers, ils ne sont pas très bons. :-)

Au lieu de cela, il est beaucoup plus rapide et plus compatible de simplement copier le contenu du InputStream directement sur le disque (par exemple un FileOutputStream).

Modifier votre code le long des lignes de mon commentaire, vous obtiendrez:

OraclePreparedStatement pst = 
(OraclePreparedStatement)con.prepareStatement("select chq_tif_img from 
mstr where id = 52"); 

ResultSet rs = pst.executeQuery(); 

if(rs.next()) 
{ 
    bfile = ((OracleResultSet)rs).getBFILE ("chq_tif_img ");  
    bfile.openFile(); 

    // Skipping debug output for brevity 

    try (InputStream inputStream = bfile.getBinaryStream(); 
     OutputStream os_omg = new FileOutputStream("anand.tiff")) { 
     FileUtils.copy(inputStream, os_omg); 
    } 
    finally { 
     bfile.closeFile(); // Make sure you always close the file when done 
    } 
} 

FileUtils.copy peut être mis en œuvre:

public void copy(final InputStream in, final OutputStream out) { 
    byte[] buffer = new byte[1024]; 
    int count; 

    while ((count = in.read(buffer)) != -1) { 
     out.write(buffer, 0, count); 
    } 

    // Flush out stream, to write any remaining buffered data 
    out.flush(); 
} 
+0

Merci beaucoup pour votre code. Cela a résolu mon problème. –