問題タブ [random-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
indexing - 7zip .7z アーカイブへのインデックス作成 / ランダム アクセス
gzip および bzip2 アーカイブへのランダム アクセスを提供するツールが存在します。
- Ghostscript ソースコードからのgzip zran.c
- James Taylorによるbzip2 seek-bzip
7zipの同様のソリューションを探しています
(目標は、解凍されたコピーを保持せずに、時々巨大な Wikipedia ダンプ ファイルをオフラインで利用することです)
java - 書き込み中にファイルを読み取る
Tomcatログファイルを読み取る必要があり、しばらくすると(たとえば、1時間)ファイルを再度読み取ります(新しく追加されたコンテンツの場合のみ)。そこで、RandomAccessFileを作成して、最後に完了した位置を記録し、使用します。 BufferedReader.readLine()メソッド。
しかし、ファイルの行全体を読み取れない場合があります。
たとえば、Tomcatは次のコンテンツを書き込もうとしています(単なる例)。
192.168.0.0 localhost/index.html....。
そしてこの瞬間、私が読んだときに私は結果を得るかもしれません:
192.168.0 0 localhost/index.html....。
また
192.168.0.0 localhost/index.html....。
つまり、この行が書き込まれている場合、私の読者は不完全な行を読みます。
それで、読んでいる行が完了したかどうかを判断するためのアイデアはありますか?
これはコアコードです:
私はこれを試しました(条件を追加してください):
しかし、それは機能しません。
何か案が?
java - RandomAccessFileの問題
ファイルをリッスンする必要があります。その内容が追加されたら、新しい行を読み取り、新しい行の内容に取り組みます。ファイルの長さが短くなることはありません(実際には、Tomcatログファイルです)。
私は次のコードを使用します:
さて、私の問題は、ファイルの新しい行に書き込まれている行が完了していない場合、デッドループが発生することです。
たとえば、Tomcatがファイルに新しい行を書き込もうとした場合:
そして、行の一部だけが書き込まれる場合(例:< 10.33.2.45 --- [08 / Dec / 2010:08:44:43 +0800] "GET /poi.txt HTTP / 1.1" 200 672 >)、これで、定義したパターンと一致しないため、つまり、tomcatは書き込み作業を完了しないため、ファイルポインターをロールバックし、2秒間スリープしてから、もう一度読み取ります。
スリープ時間中、行の最後の部分はまだ書き込まれている可能性があります(実際、テスト用にTomcatではなく書き込みます)。私の意見では、randomaccessfileはパターンに一致する新しい行を読み取りますが、そうではないようです。
誰でもコードをチェックすることができますか?
注:ログファイルの形式は、次のように「結合」されます。
c++ - C++ でのランダム アクセス ファイリングの奇妙な問題
これは単純なランダム アクセス ファイリング プログラムです。データをランダムに書き込みたい場合に問題が発生します。ファイルのどこかに書き込むと、以前のレコードは 0 に設定されます。現在入力されている最後の 1 は、他のすべて =0 の正しい値を保持します。
これがコードです
理解できません Y 前のレコードが 0 になります。
java - Javaでのファイルストリーミング
私は現在、JOGL(Java OpenGLバインディング)を使用して3Dグラフィックスアプリケーションを開発しています。簡単に言えば、私は巨大なランドスケープバイナリファイルを持っています。サイズが大きいため、実行時に地形チャンクをストリーミングする必要があります。したがって、ランダムアクセスの懸念が明確にわかります。私はすでに最初の(そして汚い:))実装を完了しました(おそらくそれはマルチスレッドです)、そこで私は愚かなアプローチを使用しています...これがその初期化です:
そして、特別なチャンクを読み取る(ストリーミングする)必要がある場合(ファイル内の「オフセット」はすでにわかっています)、次のことを実行しています(恥ずかしいです:)):
私はほとんど経験がなかったので、最初に考えることができました:)それで、これまでに3つの有用で非常に興味深い記事を読みました(おそらくこのトピックに興味があるなら、それらを読むことをお勧めします)
バイトバッファと非ヒープメモリ-グレゴリー氏はJavaNIOに精通しているようです。
Javaのヒント:ファイルをすばやく読み取る方法[http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly]-これは興味深いベンチマークです。
記事:Java I /Oパフォーマンスの調整[http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/]-Sunの簡単な推奨事項ですが、下にスクロールして、そこにある「ランダムアクセス」セクションを参照してください。これらは、自己バッファリングが改善されたRandomAccessFile(RAF)の単純な実装を示しています。
グレゴリー氏は、彼の記事の最後にいくつかの*.javaファイルを提供しています。それらの1つは、FileChannel + ByteBuffer + Mapping(FBM)とRAFの間のベンチマークです。彼は、RAFと比較してFBMを使用すると4倍のスピードアップに気づいたと言います。このベンチマークは、次の条件で実行しました。
- オフセット(アクセス場所など)はランダムに生成されます(ファイルスコープでは、0-file.length()など)。
- ファイルサイズは220MBです。
- 1 000 000アクセス(75%の読み取りと25%の書き込み)
結果は驚くべきものでした:
RAFの場合は約28秒! FBMの場合は約0.2秒!
ただし、このベンチマークでの彼のRAFの実装には自己バッファリングがありません(3番目の記事で自己バッファリングについて説明しています)。したがって、パフォーマンスを大幅に低下させるのは「RandomAccessFile.seek」メソッド呼び出しだと思います。
さて、私が学んだすべてのことの後に、1つの質問と1つのジレンマがあります:)
質問:「FileChannel.map」を使用してファイルをマッピングする場合、Javaはファイルの内容全体をMappedByteBufferにコピーしますか?それともそれをエミュレートするだけですか?コピーする場合、FBMアプローチを使用することは私の状況には適していませんか?
ジレンマ:質問に対するあなたの答えに依存します...
マッピングがファイルをコピーする場合、2つの解決策しか考えられないようです:RAF +セルフバッファリング(3番目の記事からのもの)またはFileChannelの位置を利用する(マッピングではない)...どちらになりますか良くなる?
マッピングでファイルがコピーされない場合は、3つのオプションがあります。前の2つのオプションとFBM自体です。
編集:ここにもう1つの質問があります。ここにいる人の中には、マッピングはファイルをMappedByteBufferにコピーしないと言う人もいます。では、なぜ1GBのファイルをマップできないのですか、「マップに失敗しました」というメッセージが表示されます...
PSインターネットでこのトピックに関する一貫した情報を見つけることができないので、アドバイス付きの充実した回答を受け取りたいと思います。
ありがとう :)
java - RandomAccessFile を閉じるのにちょうど 45 秒かかることがあります
私のプログラムでは、java.util.RandomAccessFile を閉じるのにちょうど 45 秒かかることがあります (ほぼ正確に言えば、44.998 秒から 45.003 秒の間です)。プログラムは、多数の小さなファイルを作成して閉じます。通常、ファイルのクローズは非常に高速です (0 ~ 0.1 秒)。プログラムをデバッグすると、ネイティブ メソッド RandomAccessFile.close0 でスタックします。
同じ問題は、RandomAccessFile の代わりに FileOutputStream を使用した場合にも発生します (この場合、プログラムはネイティブ メソッド FileOutputStream.close0 でブロックされます)。
誰かがそれが何であるか考えていますか? お使いのシステムで問題を再現できますか (Windows XP ではなく Mac でのみ再現できます。Linux ではまだテストしていません)。
更新 2:
これは Mac OS X でのみ発生するようです。私は JDK 1.6.0_22-b04 を使用しています。32 ビットと 64 ビットの両方で発生します。Windows XP では発生しないようです。
私のテストケースは次のとおりです。
私のマシンでの出力例:
c# - CSV ランダム アクセス; C#
基本的に巨大な正方行列である 10GB の CSV ファイルがあります。マトリックスの単一セルにできるだけ効率的にアクセスできる関数、つまりマトリックス[12345,20000]を作成しようとしています。
そのサイズを考えると、マトリックス全体を 2D 配列にロードすることは明らかに不可能です。ファイルから値を直接読み取る必要があります。
FileStream.Seek を使用してファイルのランダム アクセスを調べてみましたが、残念ながら変数の丸めにより、各セルは固定幅ではありません。特定のバイトを探して、ある種の算術演算でどのセルを見ているのかを知ることはできません。
ファイルをスキャンして、各行の最初のバイトのインデックスのルックアップ テーブルを作成することを検討しました。このようにして、matrix[12345,20000] にアクセスしたい場合は、行 12345 の先頭を探してから、行全体をスキャンし、正しいセルに到達するまでコンマを数えます。
私はこれを試してみようとしていますが、他の誰かがより良いアイデアを持っていますか? このようなファイルを処理しようとしたのは、私が初めてではないと確信しています。
乾杯
編集:ファイルには非常にまばらな行列が含まれていることに注意してください。CSV ファイルの解析が遅すぎる場合は、ファイルをより適切で処理しやすいファイル形式に変換することを検討します。スパース行列を格納する最良の方法は何ですか?
database - Rails 3: データベースから 1 つのランダムな項目を表示: Question_Edit:more_detailed
編集:より詳細で要点
Rails 3を使用しています:
現在、データベースから取得され、プロパティ/インデックス ページに表示されるアイテムのリストを持っています。そこでは、人々は基本情報を確認し、そのリンクをクリックしてプロパティ/表示ページに移動できます。これを呼び出すために使用しているコードは
link_to_rental(property) は Properties Helper で定義されています
私がやりたいことは、私のホームページ/インデックス ページにおすすめの物件を掲載することです。プロパティ コントローラから 1 つのプロパティをランダムに取得し、その .title をホーム/インデックス ページに表示する同様のものを使用する方法はありますか?
注: rand は Rails 3 では非推奨です。random_element を使用する必要があります。
python - Pythonの文字列のランダムアクセスコンテナ?
インデックス付きのインスタンス(たとえば、音楽トラック)を操作し、オブジェクトの名前をそのインデックス(int-> string)で検索する必要があります。ディクトが遅すぎます(私は約1000万個のオブジェクトを持っています)。メモリは問題ではないので、最も便利な解決策は、名前付きのcsvファイルから文字列のランダムアクセス配列を作成することです。
ただし、Pythonでこれを作成できませんでした。0次元の配列(文字列)にインデックスを付けることができないというエラーが発生しました。文字列のランダムアクセスコンテナを作成するためのネイティブPythonの方法は何ですか?