1
new BufferedReader(new InputStreamReader(
       new GZIPInputStream(s3Service.getObject(bucket, objectKey).getDataInputStream())))

readLine()ファイルが数 MB より大きい場合、~100 行後から null を返す Reader を作成します。1 MB 未満の gzip ファイルでは再現できません。誰もこれを処理する方法を知っていますか?

4

1 に答える 1

0

のドキュメントからBufferedReader#readLine():

戻り値:

行終了文字を含まない、行の内容を含む文字列、またはストリームの末尾に到達した場合は null

これが何を意味するかは明らかです。ファイル/ストリームの終わりに達しました - これ以上データがありません。

GZIP 形式の顕著な癖: 複数のファイルを互いに追加するだけで、gzip で圧縮された複数のオブジェクトを含む大きなファイルを作成できます。GZIPInputStreamのみがそれらの最初のものを読み取るようです。

これは、「小さなファイル」で機能する理由も説明しています。これらには圧縮されたオブジェクトが 1 つしか含まれていないため、ファイル全体が読み取られます。

注: がGZIPInputStream非破壊的に 1 つの gzip ファイルが終了したと判断した場合はGZIPInputStream、同じファイルで別のファイルを開いてInputStream複数のオブジェクトを読み取ることができます。

于 2015-07-07T17:52:41.833 に答える