Stream Jython 2.2.1如何解压缩gzip流?
我无法将Jython 2.2.1与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
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