ホームページ  >  に質問  >  本文

java - 读取大于内存的大文件怎么读?

参考:
    有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做?

网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。

那么我的问题是:
如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?
或者说是读取大于内存的文件应该怎么读?

PHP中文网PHP中文网2742日前954

全員に返信(6)返信します

  • 黄舟

    黄舟2017-04-18 10:57:16

    ここでのメモリはパイプのようなもので、1G のファイルをメモリに渡すだけです。10M はパイプの太さを表します。
    そのため、1 行ずつ読み取ると 1G のファイルが 加载进去过 メモリに取り込まれます。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:57:16

    リーリー

    ファイルがどんなに大きくても、各行の長さが制限されている限り、ファイル全体を読み取るには時間がかかりますが、メモリをあまり消費しません。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:57:16

    チャンクで読み取り、チャンクごとに 1 つの結果セットを読み取り、最後に結果セットを集計します
    テキストを処理している場合は、行数を知っておくとよいでしょう

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:57:16

    linux上面有个指令叫做split大きなテキストを同時に小さなファイルにすばやく分割して、便利に処理できます。このアルゴリズムは外部ソートと呼ばれます

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:57:16

    記憶はメモ用紙のようなものです。記事を書き終えたら、裏返します。 使用済みおよび未使用のデータは破棄されます。

    簡単な例では、変数 buff を作成し、そのサイズを設定し、ファイル ストリームを開いて値を入力します。値が入力された後、必要な内容を確認します。見つかった場合は、別の変数でカウントされます。 次に、バフをクリアし、以前に読み取られた位置でコンテンツを再度ロードし続けます...読み取りが完了するまで、統計が完了します。

    返事
    0
  • 阿神

    阿神2017-04-18 10:57:16

    さまざまなシステムに対して、メモリより大きいファイルを操作するための API が提供されます。つまり、ファイルはメモリとして扱われます。

    内存映射

    • mmap

    • ファイルマッピングの作成

    返事
    0
  • キャンセル返事