首頁  >  文章  >  資料庫  >  如何將資料庫中的 BufferedInputStream Blob 轉換為可見影像?

如何將資料庫中的 BufferedInputStream Blob 轉換為可見影像?

Linda Hamilton
Linda Hamilton原創
2024-11-09 21:22:02961瀏覽

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