どのようにBufferedReaderのは、S3からファイルを読み込むのですか?

sbhatla:

私は、AWS S3で非常に大きなファイル(数GB)を持っている、と私は、特定の条件を満たしたファイル内の行の数が少ないが必要です。このため、メモリの負荷が高すぎるだろう - 私は、メモリ内のファイル全体をロードし、その後を検索し、それらのいくつかの行を印刷しません。正しい方法は必要とされ、メモリ内のこれらの行を読み込むことであろう。

AWSのドキュメントごとにファイルから読み取ります

fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
 displayTextInputStream(fullObject.getObjectContent());

private static void displayTextInputStream(InputStream input) throws IOException {
    // Read the text input stream one line at a time and display each line.
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    System.out.println();
}

ここでは、使用しているBufferedReaderのをここの下に何が起こっているのか私には明確ではありません。

私たちは、新しい行を読んで、そして唯一のバッファの現在の行を維持しているたびに、S3へのネットワーク呼び出しを行っていますか?またはファイル全体をメモリ内にロードして、BufferedReaderのでライン・バイ・ラインを読みますか?それとも間のどこかにありますか?

ローター:

あなたの質問の答えの一つは、すでにリンクされたドキュメントに記載されています。

あなたは、データまたは近い入力ストリームのすべてを読むまで、あなたのネットワーク接続は開いたまま。

Aは、BufferedReaderあなたが別のものを渡しているので、それは読み込みデータがどこから来ている知っていないReaderことに。Aは、BufferedReader特定のサイズ(例えば、4096文字)のバッファを作成し、根底から読み出すことにより、このバッファを満たすReaderの呼のデータ配っを開始する前に、read()またはread(char[] buf)

Readerあなたがに渡すのBufferedReaderである-によって-自体はからの変換行うための別のバッファ使用byteするベースのストリームcharベースのリーダーを。それはと同じように動作するBufferedReader内部バッファが渡されるから読み込むことで満たされているので、InputStreamしているInputStreamあなたのS3-クライアントによって返されました。

あなたは、ストリームからの負荷データにしようとすると、まさにこのクライアント内で起こるかは実装依存です。一つの方法は、オープン1のネットワーク接続を維持するだろうとあなたが望むまたはデータのチャンクが読み込まれた、あなたが次のいずれかを取得しようとすると、新しいものが開かれた後、ネットワーク接続を閉じることができて、あなたはそれから読み取ることができます。

上記引用されたドキュメントはそう、私たちはここにかつての状況を持っていると言っているようだ:いいえ、の呼び出しはreadLine、単一のネットワーク呼び出しにつながるされていません。

そして、あなたの他の質問に答えるために:いいえ、BufferedReaderInputStreamReader最も可能性の高いInputStreamS3-クライアントから返されたメモリに、ドキュメント全体にロードされていません。すなわち、最初の場所でストリームを使用して全体の目的と矛盾なり、S3クライアントは単に返すことができbyte[][](2 ^ 32バイトあたりの制限を回避来る代わりにbyte-array)

編集:最後の段落の例外があります。全体ギガバイトの大きな文書は一切改行を持っていない場合は、呼び出しはreadLine、実際にメモリに全データの読み出し(最も可能性の高いOutOfMemoryErrorが発生する)につながります。あなたの質問に答えながら、私は「通常の」テキストドキュメントを想定しました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177423&siteId=1