Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie konvertiere ich einen BufferedInputStream-Blob aus einer Datenbank in ein sichtbares Bild?

Linda Hamilton
Freigeben: 2024-11-09 21:22:02
Original
926 Leute haben es durchsucht

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

BufferedInputStream in Bild konvertieren

Die Herausforderung entsteht, wenn versucht wird, einen aus einer Datenbank abgerufenen Blob in ein sichtbares Bild umzuwandeln. In diesem speziellen Fall wird der Blob als BufferedInputStream gespeichert und die direkte Konvertierung in ein Bild über ImageIO.read gibt null zurück.

Behebung des Problems

  1. Validieren Sie den InputStream: Stellen Sie sicher, dass die Blob#getBytes-Methode die richtige Länge zurückgibt. Stellen Sie sicher, dass der Dateiinhalt nicht abgeschnitten wird.
  2. Binärdaten korrekt extrahieren: Verwenden Sie Blob#getBinaryStream anstelle von Blob#getBytes, um die Binärdaten abzurufen, und berücksichtigen Sie dabei die spezifischen Merkmale der Datenbank (z. B. , H2).
  3. BufferedInputStream umgehen: Bypass the BufferedInputStream durch Erstellen eines ByteArrayOutputStream und Schreiben der Binärdaten dorthin. Erstellen Sie dann einen ByteArrayInputStream aus dem ByteArrayOutputStream zur Verwendung mit ImageIO.read.

Vorgeschlagene Codeänderungen:

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;
}
Nach dem Login kopieren

Durch die Implementierung dieser Änderungen wird der Blob korrekt abgerufen, in einen ByteArrayInputStream konvertiert und mit ImageIO.read.

als Bild gelesen

Das obige ist der detaillierte Inhalt vonWie konvertiere ich einen BufferedInputStream-Blob aus einer Datenbank in ein sichtbares Bild?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage