参考:
有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做?
网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。
那么我的问题是:
如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?
或者说是读取大于内存的文件应该怎么读?
黄舟2017-04-18 10:57:16
ここでのメモリはパイプのようなもので、1G のファイルをメモリに渡すだけです。10M はパイプの太さを表します。
そのため、1 行ずつ読み取ると 1G のファイルが 加载进去过
メモリに取り込まれます。
伊谢尔伦2017-04-18 10:57:16
リーリー
ファイルがどんなに大きくても、各行の長さが制限されている限り、ファイル全体を読み取るには時間がかかりますが、メモリをあまり消費しません。
伊谢尔伦2017-04-18 10:57:16
チャンクで読み取り、チャンクごとに 1 つの結果セットを読み取り、最後に結果セットを集計します
テキストを処理している場合は、行数を知っておくとよいでしょう
高洛峰2017-04-18 10:57:16
linux
上面有个指令叫做split
大きなテキストを同時に小さなファイルにすばやく分割して、便利に処理できます。このアルゴリズムは外部ソートと呼ばれます
怪我咯2017-04-18 10:57:16
記憶はメモ用紙のようなものです。記事を書き終えたら、裏返します。 使用済みおよび未使用のデータは破棄されます。
簡単な例では、変数 buff を作成し、そのサイズを設定し、ファイル ストリームを開いて値を入力します。値が入力された後、必要な内容を確認します。見つかった場合は、別の変数でカウントされます。 次に、バフをクリアし、以前に読み取られた位置でコンテンツを再度ロードし続けます...読み取りが完了するまで、統計が完了します。
阿神2017-04-18 10:57:16
さまざまなシステムに対して、メモリより大きいファイルを操作するための API が提供されます。つまり、ファイルはメモリとして扱われます。
内存映射
mmap
ファイルマッピングの作成