首页  >  文章  >  数据库  >  如何将数据库中的 BufferedInputStream Blob 转换为可见图像?

如何将数据库中的 BufferedInputStream Blob 转换为可见图像?

Linda Hamilton
Linda Hamilton原创
2024-11-09 21:22:02962浏览

How to Convert a BufferedInputStream Blob from a Database into a Visible Image?

将 BufferedInputStream 转换为图像

尝试将从数据库检索的 Blob 转换为可见图像时会出现挑战。在这种特定情况下,Blob 存储为 BufferedInputStream,并通过 ImageIO.read 将其直接转换为图像返回 null。

解决问题

  1. 验证输入流:验证 Blob#getBytes 方法返回正确的长度。确保文件内容不被截断。
  2. 正确提取二进制数据:使用 Blob#getBinaryStream 而不是 Blob#getBytes 来检索二进制数据,考虑到数据库的特定特征(例如, , H2).
  3. 绕过 BufferedInputStream: 通过创建 ByteArrayOutputStream 并将二进制数据写入其中来绕过 BufferedInputStream。然后从 ByteArrayOutputStream 创建一个 ByteArrayInputStream 以与 ImageIO.read 一起使用。

建议的代码修改:

public BufferedImage getPhoto(Connection con) throws IOException, SQLException {
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    byte[] data;
    
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         InputStream is = blob.getBinaryStream()) {
        
        int nRead;
        byte[] buffer = new byte[4096];
        while ((nRead = is.read(buffer, 0, buffer.length)) != -1) {
            baos.write(buffer, 0, nRead);
        }
        
        data = baos.toByteArray();
        image = ImageIO.read(new ByteArrayInputStream(data));
    } catch (SQLException | IOException e2) {
        e2.printStackTrace();
    }
    
    return image;
}

通过实现这些修改,Blob 是正确检索,转换为 ByteArrayInputStream,并使用 ImageIO.read 读取为图像。

以上是如何将数据库中的 BufferedInputStream Blob 转换为可见图像?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn