Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取zip文件而不首先保存它_Java_Coldfusion_Coldfusion 10_Cfzip - Fatal编程技术网

Java 读取zip文件而不首先保存它

Java 读取zip文件而不首先保存它,java,coldfusion,coldfusion-10,cfzip,Java,Coldfusion,Coldfusion 10,Cfzip,我有一个API调用,返回.zip格式的二进制压缩数据。我不想先将文件保存到磁盘,然后再解压缩。我想在记忆中快速解压。然后解析xml内容 有没有一种方法可以通过cfzip或直接通过java来实现这一点?基本上是编辑我在cflib上找到的代码 <cffunction name="ungzip" returntype="any" displayname="ungzip" hint="decompresses a binary|(base64|hex|uu) using t

我有一个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>

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输入=0;
var decompressionnputstream=0;
var l=0;
if(非isBinary(参数[1])和arrayLen(参数)为1)返回;
if(arrayLen(参数)gt 1){
输入=二进制解码(参数[1],参数[2]);
}否则{
输入=参数[1];
}
decompressInputStream=createObject(“java”、“java.util.zip.GZIPInputStream”)
.init(createObject(“java”、“java.io.ByteArrayInputStream”)
.init(输入));
l=解压缩InputStream.read(byteArray,0,bufferSize);
而(l gt-1){
decompressOutputStream.write(byteArray,0,l);
l=解压缩InputStream.read(byteArray,0,bufferSize);
}
解压缩nputstream.close();
解压缩OutputStream.close();
返回decompressOutputStream.toString();

看一看,它不会包含任何条目,它只是一个压缩流……您可以将数据压缩到流中,但我不相信您可以在不首先读取整个数据流的情况下从流中解压缩zip数据,因为zip元数据存储在文件末尾。请参阅的
结构
部分:一行空白就足够了。不要让“每隔一行”空白!为什么不先把它保存到RAM磁盘上呢?那么它就不在旋转磁盘上了,您可以直接从ram中读取它://