Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Stream Jython 2.2.1如何解压缩gzip流?_Stream_Streaming_Gzip_Jython_Zlib - Fatal编程技术网

Stream Jython 2.2.1如何解压缩gzip流?

Stream Jython 2.2.1如何解压缩gzip流?,stream,streaming,gzip,jython,zlib,Stream,Streaming,Gzip,Jython,Zlib,我无法将Jython 2.2.1与zlib模块版本1.1.3一起用于项目。我需要下载大量gzip数据,对其进行处理,然后将其写入数据库。我希望避免在内存中有多个数据副本,所以我将其解压缩为流 使用Python 2.7.2,我能够将gzip流解压缩为: from zlib import decompressobj, MAX_WBITS f = open('stream.gz', 'rb') # in real life, this stream comes from urllib2 gunz

我无法将Jython 2.2.1与
zlib
模块版本1.1.3一起用于项目。我需要下载大量gzip数据,对其进行处理,然后将其写入数据库。我希望避免在内存中有多个数据副本,所以我将其解压缩为流

使用Python 2.7.2,我能够将gzip流解压缩为:

from zlib import decompressobj, MAX_WBITS

f = open('stream.gz', 'rb') # in real life, this stream comes from urllib2  
gunzipper = decompressobj(16+MAX_WBITS)  
data = ''  
for chunk in iter(lambda: f.read(BLOCK_SIZE), ''):
    data += gunzipper.decompress(chunk)
#done
但是,在Jython 2.2.1下,相同的代码在创建
解压缩对象时出错:

.\jythonLib.jar\lib/zlib$py.class", line 89, in __init__
ValueError: Invalid initialization option
显然不适用于此旧版本的
zlib

我是Jython Java方面的新手,想知道是否有一种方法可以使用Jython中的Java类来解压缩gzip流?或者也许有一种方法可以诱使zlib1.1.3接受gzip头


欢迎使用任何其他可能的解决方案。

没有办法诱使对zlib 1.1.3的调用解码gzip头。zlib1.2.0中添加了该功能


您也可以自己解码gzip包装,并使用
-MAX_WBITS
调用原始充气作为压缩有效负载的参数。您可以找到中定义的gzip包装器。

我能够通过使用Jython中的集成Java库来解决使用这个旧zlib模块的问题

我还必须使用Java类处理我的URL,以便将
FileInputStream
对象传递给gzip解码器

供日后参考:

from java.io import BufferedReader,InputStreamReader
from java.util.zip import GZIPInputStream
from java.net import URL

url = URL('http://data.com')
urlconn = url.openConnection()
urlconn.setRequestProperty('Accept-encoding', 'gzip, compress')
urlconn.connect()

reader = BufferedReader(InputStreamReader(GZIPInputStream(urlconn.getInputStream())))
data = ''
for chunk in iter(lamdba: reader.readLine(), None):
    data += chunk