正在尝试从oracle DB中读取映像blob,Java中的ImageIO.read不起作用

正在尝试从oracle DB中读取映像blob,Java中的ImageIO.read不起作用,java,oracle,image,blob,javax.imageio,Java,Oracle,Image,Blob,Javax.imageio,我有一些图像作为blob存储在oracle数据库中。我想阅读它们并显示在JLabel中。在读取它们之后,我尝试使用ImageIO.read,但它总是返回null。请参见下面的我的代码: Blob blob = rs.getBlob(2); BufferedImage frontImg = ImageIO.read(blob.getBinaryStream()); lblFrontImage.setIcon(new ImageIcon(frontImg)); 我可以使用以下代码将图像保存到文件中

我有一些图像作为blob存储在oracle数据库中。我想阅读它们并显示在JLabel中。在读取它们之后,我尝试使用ImageIO.read,但它总是返回null。请参见下面的我的代码:

Blob blob = rs.getBlob(2);
BufferedImage frontImg = ImageIO.read(blob.getBinaryStream());
lblFrontImage.setIcon(new ImageIcon(frontImg));
我可以使用以下代码将图像保存到文件中,因此我知道图像是有效的:

Blob blob = rs.getBlob(2);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream("test.jpg");
byte[] buff = new byte[4096];  
int len = 0;
while ((len = in.read(buff)) != -1) {
   out.write(buff, 0, len);
}
out.close();
我尝试过用JLabel显示图像的其他方法

byte[] frontBytes = rs.getBytes(2);
BufferedImage frontImg = ImageIO.read(new 
ByteArrayInputStream(fileContent));
lblFrontImage.setIcon(new ImageIcon(frontImg));


尝试了很多方法,只需不断获取
java.lang.NullPointerException
。没有其他异常或错误。任何帮助都将不胜感激。

我终于意识到这是因为这些图像是TIFF图像。我无法使用默认的ImageIO库。我在这里注意到另一个StackOverflow线程,并使用了您的twelvemonkeys库@haraldK,它运行良好。非常感谢。

如果图像的格式是ImageIO可以理解的,我相信您的第一次尝试应该会很好。是否可以在不使用ImageIO的情况下将存储的图像文件附加或链接到磁盘?那会有很大帮助。
byte[] frontBytes = rs.getBytes(2);
BufferedImage image;
ByteArrayInputStream bis = new ByteArrayInputStream(frontBytes);
image = ImageIO.read(bis);
bis.close();
lblFrontImage.setIcon(new ImageIcon(image));
InputStream in = blob.getBinaryStream();
image = ImageIO.read(in);
byte[] frontImgBytes = blob.getBytes(1, (int) blob.length());
System.out.println("front bytes length: ====\n" + frontImgBytes.length);
BufferedImage frontImage = ImageIO.read(new 
ByteArrayInputStream(frontImgBytes));
lblFrontImage.setIcon(new ImageIcon(frontImage));