2

バイナリ圧縮データを .zip 形式で返す API 呼び出しがあります。最初にファイルをディスクに保存してから解凍したくありません。その場でメモリに解凍したい。次に、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