私は、メモリにロードされずにディスク上のファイルをシャッフルするアイデアを探していました。当初、私はそのようなアプローチが存在するかどうかは疑問ですが、最近私はこれを見つけましたanswer。この回答はサポートされていないか、投票されていないので、このコードが本当にメモリにロードせずにファイルをシャッフルするかどうかを知りたいです。もしそうなら、どうすれば起こりますか?私は、ファイルを最初にメモリにロードせずにシャッフルする方法を見ていません!ファイルがメモリにロードされずにディスク上でシャッフルされる方法
2
A
答えて
4
私はあなたがテキストファイル内のラインをシャッフルすることについて話していると仮定します。
Jamie Cockburnのリンクされた回答が機能しているかどうかはわかりませんが、それは私には全く合理的です。アイデアは以下の通りです:
mmap
がメモリにファイル全体をロードしませんが、それはリストだったかのように、あなたは「から」を経由してインデックス化することによって、そのランダムな部分にアクセスすることを可能にすると、「へ」のバイト、メモリ- にロードされたあなたは、ファイルを介して二回行くんが、
- メモリにファイルを通過まず時間を、ファイルの内容をロードしていない、あなたがラインに気をつけ
\n
を破壊し、行を格納しないが、各行の開始および終了のアドレスに対応するバイト番号(またはインデックス)。あなたが効果的に - あなたは今
lines
と呼ばれるインデックスのリストシャッフル行ごとに2つの番号を格納 - は今、あなたは書き込み用に新しいファイルを開いて、シャッフル指数を反復(覚えているが、それだけでペア
(int, int)
が含まれています)。各インデックスペアについて、元のファイルからメモリに1行のdata[start:end+1]
を読み込んで、新しいファイルに書き込みます。あなたはこの一回の操作より長くメモリを保持しません。
このアプローチでは、入力ファイルの行数に直線的なメモリ量が必要です。平均行長が2つの整数を格納するのに必要なメモリ量よりも大きい場合は、ファイル全体を読み取るよりもはるかに小さいことがあります。
+0
はい、私はテキストファイルのラインをシャッフルすることを意味しました。どうもありがとうございました。よく説明された – David
関連する問題
- 1. ディスク上ではなくメモリ内で完全に実行される方法
- 2. Django - アップロードされた(メモリ)ファイルから一時的な(ディスク上の)ファイルを作る方法?
- 3. Visual Studio:ディスク上の参照されたdllファイルがリソースに追加された後にリセットされる
- 4. は、Linux上のメモリにロードされたデバッグシンボルですか?
- 5. JMeterがロードされずにエラーが返される
- 6. Rijndael管理されたCryptostreamがディスクからメモリにファイルを解読する
- 7. Androidパーセル、メモリまたはディスクに保存されていますか?ディスクに保存する方法
- 8. iframeのイベントハンドラが呼び出されずにロードされる
- 9. Razorファイルはアプリケーション上でロードされますが、同じサーバー上にはロードされません
- 10. ウェブページがリロードされるたびにオプションがシャッフルされます
- 11. ファイル全体をメモリにロードせずにxmlファイルを更新する方法
- 12. HTTPリクエストを圧縮してメモリに圧縮されたバッファをロードせずに圧縮する方法
- 13. メモリにロードされたファイルのサイズは、ディスクのサイズよりはるかに大きいですか?圧縮する方法はありますか?
- 14. アセットライブラリにファイルが表示されず、エラーが表示される
- 15. facebookがロードされたコンテンツをdivにロードする方法
- 16. なぜC#でディスクにファイルを書き込んだ後にメモリが解放されないのですか
- 17. .NETランダムアセンブリがディスク上で変更される
- 18. Express.ioにJavascriptファイルがロードされない
- 19. MacOSのGPUImage - 処理されたファイルをディスクに保存する方法
- 20. Pythonでzipファイル内のファイルをメモリに渡さずに
- 21. htmlファイルに含まれ、このファイルが動的にロードされるJavaScript変数にアクセスする方法
- 22. イメージが常にロードされるようにする方法、ASP.NET
- 23. セレン - ページが完全にロードされるまで待つ方法
- 24. UIView animateWithDurationはアニメーション化されず、ロードされるだけです
- 25. ビットマップの幅と高さをメモリにロードせずに取得
- 26. B +ツリーインデックスファイルがメモリにロードされていない場合は、ロードする方法は?
- 27. 大きなファイルをSaxMachineで解析するとファイル全体がメモリにロードされているようです
- 28. ディスクにイメージを書き込まずにJSFでバッファリングされたイメージを表示する方法は?
- 29. IntelliJで動的にロードされたjarファイルにデバッグする方法
- 30. Foundation jQueryアコーデオンレンダリングがページ上に表示されるようにロード
カードのデッキをシャッフルするのが好きです。ランダムに順序を変更する –
ファイルをメモリに一切読み込まずにシャッフルすることができます。もちろん、いくつかの部分をメモリに読み込む必要があります。 –