无法将字节数组转换为缓冲图像

时间:2017-01-18 06:23:01

标签: java mysql

我使用mysql作为我的数据库。我在我的java代码中获取字节数组。然后我将此字节数组存储在数据库中LONGBLOB。现在,当从db中检索它时,我使用下面的代码:

package com.sendSms;
import java.awt.image.BufferedImage;
import java.io.*;
import java.sql.*;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
public class SampleTest {
    public Connection getConnection(){
        Connection con=null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/forTest","root","123456");
        }catch(Exception ex){}
        return con;
    }
    public byte[] getFromDb(){
        byte[] arr=null;
        try{
            Connection con = getConnection();
            PreparedStatement pstmt=con.prepareStatement("select id,image from TestAndroid where id = ?");
            pstmt.setInt(1, 16);
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()){
            //  int id=rs.getInt("id");

                arr = rs.getBytes("image");
            }
        }
        catch(Exception ex){ex.printStackTrace();}

        return arr;
    }
    public void go() throws IOException{
        byte[] arr=getFromDb();
        InputStream is=new ByteArrayInputStream(arr);
        BufferedImage bi= ImageIO.read(is);
        if(bi==null){
            System.out.println("bi is NULL");
        }
        else{
            System.out.println("bi is NOT NULL");
        }
    }
    public static void main(String[] args) throws IOException {
        SampleTest st = new SampleTest();
        st.go();
    }

}

当我运行此代码时,我将BufferedImage视为null;虽然此时字节数组不是Null。怎么能得到这个BufferedImage。我需要BufferedImage,因为我需要将它传递给其他只接受BufferedImage的函数。我该如何解决这个问题。

同样在db中存储字节数组时,我正在使用:

setBytes(byte array)&上的

PreparedStatement方法在Db中我使用LONGBLOB数据类型来存储这个字节数组。

1 个答案:

答案 0 :(得分:1)

ImageIO.read(InputStream is)方法的javadoc声明:

  

如果没有已注册的ImageReader声称能够读取生成的流,则返回null。

可能是您的字节数组不代表有效的图像格式?