Java 读取zip文件而不首先保存它
我有一个API调用,返回.zip格式的二进制压缩数据。我不想先将文件保存到磁盘,然后再解压缩。我想在记忆中快速解压。然后解析xml内容 有没有一种方法可以通过cfzip或直接通过java来实现这一点?基本上是编辑我在cflib上找到的代码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
<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中读取它://