2

我有一个 API 调用以 .zip 格式返回二进制压缩数据。我不想先将文件保存到磁盘然后解压缩。我想在内存中即时解压缩。然后解析xml内容。

有没有办法用 cfzip 或直接通过 java 做到这一点?基本上编辑我在cflib上找到的这段代码。

<cffunction name="ungzip"
    returntype="any"
    displayname="ungzip"
    hint="decompresses a binary|(base64|hex|uu) using the gzip algorithm; returns string"
    output="no">

    <cfscript>
        var bufferSize=8192;
        var byteArray = createObject("java","java.lang.reflect.Array")
             .newInstance(createObject("java","java.lang.Byte").TYPE,bufferSize);
        var decompressOutputStream = createObject("java","java.io.ByteArrayOutputStream").init();
        var input=0;
        var decompressInputStream=0;
        var l=0;

        if(not isBinary(arguments[1]) and arrayLen(arguments) is 1) return;

        if(arrayLen(arguments) gt 1){
            input=binaryDecode(arguments[1],arguments[2]);
        }else{
            input=arguments[1];
        }

        decompressInputStream = createObject("java","java.util.zip.GZIPInputStream")
             .init(createObject("java","java.io.ByteArrayInputStream")
             .init(input));

        l=decompressInputStream.read(byteArray,0,bufferSize);

        while (l gt -1){
            decompressOutputStream.write(byteArray,0,l);
            l=decompressInputStream.read(byteArray,0,bufferSize);
        }

        decompressInputStream.close();
        decompressOutputStream.close();

        return decompressOutputStream.toString();
    </cfscript>

</cffunction>
4

0 回答 0