Entpacken einer mit zLib aus DEC gepackten Datei

Eldastoker

Grünschnabel
Hallo liebes Forum,

ich versuche aus einer Datenbank einen BLOB zu lesen, der mit Delphi und zLib komprimiert wurde. Dabei entsteht kein zip-Archiv, sondern die Datei wird nur komprimiert.

Ich versuche es derzeit mit folgendem Code:
Java:
PreparedStatement pst = connection.prepareStatement(sql);
ResultSet result = pst.executeQuery();
                    
while(result.next()){
    is = new BufferedInputStream(result.getBinaryStream(1));
    while(true){
        int numRead = is.read(input);
        if((numRead + 1) != 0){
            inf.setInput(input, 0, numRead);
        }
        int numDecompressed = 0;
        while((numDecompressed = inf.inflate(output, 0, output.length)) != 0){
            os.write(output, 0, numDecompressed);
        }
        if(inf.finished()){
            break;
        }
        else if(inf.needsDictionary()){
            System.err.println("Dictionary required! bailing...");
            break;
        }
        else if(inf.needsInput()){
            continue;
        }
    }
}
inf.reset();    
    
result.close();
Leider funktioniert es nicht ganz, da er mir folgende Fehlermeldung ausspuckt:

org.apache.jasper.JasperException: An exception occurred processing JSP page /open.jsp at line 72

69: inf.setInput(input, 0, numRead);
70: }
71: int numDecompressed = 0;
72: while((numDecompressed = inf.inflate(output, 0, output.length)) != 0){
73: os.write(output, 0, numDecompressed);
74: }
75: if(inf.finished()){

javax.servlet.ServletException: java.util.zip.DataFormatException: unknown compression method
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.open_jsp._jspService(open_jsp.java:198)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Wie man sieht versuche ich das ganze in einer JSP.

Ich hoffe ihr könnt mir vielleicht helfen. Bei Fragen, einfach fragen

Liebe Grüße,

Eldastoker
 
Naja. In dem Delphi Compendium gibt es eine Funktion (ZLibCompressStream) die aus einem InputStream einen komprimierten InputStream macht. Dabei wird kein Format angegeben.

ich gehe aber stark davon aus, dass ZLIB genutzt wird, welches auch als eigenes Format besteht (oder nicht?).

http://download.oracle.com/javase/1.4.2/docs/api/java/util/zip/Inflater.html

Hier mal die Stelle im Delphi-Code, an der komprimiert wird:

Code:
aZip := TVCLZip.Create(nil);
aZip.PackLevel        := 9;
aZip.ZLibCompressStream(AFileStream,Result);
 
Zurück