プロジェクトでJython2.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では、decompressobj
:を作成するときに同じコードでエラーが発生します。
.\jythonLib.jar\lib/zlib$py.class", line 89, in __init__
ValueError: Invalid initialization option
どうやら、ヘッダーオフセットトリックはこの古いバージョンのでは機能しませんzlib
。
私はJythonのJava側に不慣れで、Jython内のJavaクラスを使用してgzipストリームを解凍する方法があるかどうか疑問に思っていましたか?zlib 1.1.3
または、gzipヘッダーを受け入れるように誘導する方法はありますか?
他の潜在的な解決策は大歓迎です。