問題タブ [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.

0 投票する
10 に答える
9753 参照

c# - C# を使用してファイルに文字を挿入する方法

特定の場所に特定の文字を挿入する必要がある巨大なファイルがあります。ファイル全体を再度書き直さずに C# でこれを行う最も簡単な方法は何ですか。

0 投票する
2 に答える
13005 参照

java - Javaのランダムアクセスファイル

次のフィールドがあります。

  • 在庫管理 (16バイトレコード)
    • 製品 ID コード (int – 4 バイト)
    • 在庫数 (int – 4 バイト)
    • 価格 (double – 8 バイト)

上記の長さを使用して、固定長のランダム アクセス ファイルを作成するにはどうすればよいですか? オンラインでいくつかの例を試しましたが、それらにアクセスしようとすると、EOF 例外またはランダムなアドレス値が返されます。

さらにいくつかの例を試してみましたが、概念がよくわかりませんでした。私はそれを使ってプロジェクトを試みており、それについてもっと探求しようとしています。

ここにいくつかの例のデータがあります。である可能性があるデータに穴がある可能性がありNo. in stockます23 == 023

助けてくれてありがとう。

0 投票する
6 に答える
7880 参照

compression - ファイルのランダムな読み取り/書き込みを可能にする最適な圧縮アルゴリズムは何ですか?

ファイルのランダムな読み取り/書き込みを可能にする最適な圧縮アルゴリズムは何ですか?

適応圧縮アルゴリズムが問題外であることはわかっています。

そして、ハフマンエンコーディングが問題外であることは知っています。

ランダムな読み取り/書き込みを可能にする、より優れた圧縮アルゴリズムを持っている人はいますか?

ブロックで記述すれば、任意の圧縮アルゴリズムを使用できると思いますが、理想的には、一度にブロック全体を解凍する必要はありません。しかし、これを行う簡単な方法とブロック境界を知る方法について提案がある場合は、お知らせください。これが解決策の一部である場合は、読み取りたいデータがブロック境界をまたいでいる場合の対処方法も教えてください。

あなたの回答の文脈では、問題のファイルが100GBであると仮定してください。最初の10バイトを読みたい場合もあれば、最後の19バイトを読みたい場合もあり、17バイトを読みたい場合もあります真ん中のバイト。.

0 投票する
9 に答える
20027 参照

c# - .NET C#-テキストファイルのランダムアクセス-簡単な方法はありませんか?

その中にいくつかの「レコード」を含むテキストファイルがあります。各レコードには、名前とデータとしての番号のコレクションが含まれています。

ファイルを読み取り、すべてのレコードの名前のみを表示し、ユーザーが必要なレコードデータを選択できるようにするクラスを構築しようとしています。

初めてファイルを調べるときは、ヘッダー名のみを読み取りますが、ヘッダーが存在するファイル内の「位置」を追跡できます。ユーザーが要求した後、各レコードの先頭を探すために、テキストファイルにランダムアクセスする必要があります。

ファイルが大きすぎて、アプリケーションの他のメモリ要求とともにメモリ(1GB以上)に完全に読み込むことができないため、この方法で行う必要があります。

これを実現するために.NETStreamReaderクラスを使用してみました(これは非常に使いやすい「ReadLine」機能を提供しますが、ファイルの実際の位置をキャプチャする方法はありません(BaseStreamプロパティの位置はクラスが使用するバッファ)。

.NETでこれを行う簡単な方法はありませんか?

0 投票する
13 に答える
25908 参照

compression - アーカイブ内のランダム アクセスを適切にサポートする圧縮形式は?

これは前の質問に似ていますが、そこにある回答は私のニーズを満たしていないため、私の質問は少し異なります。

私は現在、ソートされたデータを含むいくつかの非常に大きなファイルに gzip 圧縮を使用しています。ファイルが圧縮されていない場合、バイナリ検索は、並べ替えられたデータ内の場所へのシークをサポートする便利で効率的な方法です。

しかし、ファイルが圧縮されると、事態は複雑になります。最近、 zlibのオプションについて知りましたZ_FULL_FLUSH。これは、圧縮中に使用して、圧縮された出力に「同期ポイント」を挿入inflateSync()できます(その後、ファイル内のさまざまなポイントから読み取りを開始できます)。これは問題ありませんが、この機能を追加するには、既に持っているファイルを再圧縮する必要があります (奇妙なことにgzip、このオプションはありませんが、必要に応じて独自の圧縮プログラムを作成します)。

ある情報源によると、完全な解決策ではないようZ_FULL_FLUSHです...すべての gzip アーカイブでサポートされているわけではないだけでなく、アーカイブ内の同期ポイントを検出するというアイデア自体が誤検知を引き起こす可能性があります (同期のマジック ナンバーとの一致による)ポイント、またはZ_SYNC_FLUSHも同期ポイントを生成しますが、ランダム アクセスには使用できないため)。

より良い解決策はありますか?可能であれば、インデックス作成用の補助ファイルを使用することは避けたいと思います。また、準ランダム アクセスの明示的なデフォルト サポートが役立ちます (10 MB 間隔ごとに読み取りを開始できるように、粒度が大きい場合でも)。gzip よりもランダムな読み取りをより適切にサポートする別の圧縮形式はありますか?

編集: 前述したように、圧縮データでバイナリ検索を実行したいと考えています。特定の (圧縮されていない) 位置をシークする必要はありません。圧縮ファイル内の粗い粒度でシークするだけです。「この圧縮ファイルの約 50% (25%、12.5% など) からデータを解凍する」などのサポートが必要です。

0 投票する
1 に答える
1087 参照

java - FTPサーバーに含まれるファイルでRandomAccessFileをどのように使用できますか?

この問題はJavaに関係しています

RandomAccessFileを使用することで、ファイルを空白にすることなく変更できるようにするつもりです。

0 投票する
3 に答える
1711 参照

java - 大きなファイルへの Java アクセス

サイズが不明であるが、mb から gb の範囲でコンテンツをランダムに埋めることができるファイルを作成する効率的な方法を探しています。最後にジャンプして最後の 200 バイトを書き込み、中央に移動してそこに書き込むよりも、最初の 200 バイトを書き込むことができます。これを行うのに効率的ですRandomAccessFileか、またはこの種の仕事により適した代替手段はありますか?

0 投票する
1 に答える
983 参照

java - RandomAccessFile.close() は内部的に FileChannel.force() を呼び出しますか?

RandomAccessFile を使用して、トランザクションの一部としてファイルへの書き込みを実行しています。トランザクションをコミットする前に、データがディスクに書き込まれていることを完全に確認したいと考えています。force(boolean)RAFを呼び出すとFileChannelこの保証が得られるように見えますが、ファイルを閉じるときに暗黙的に呼び出されるのでしょうか、それとも手動で呼び出す必要がありますか?

force()また、実際に何をしているのか、そしてそれがどこまで信頼できるのかについての洞察を誰かが持っていますか? OS がデータがディスクに書き込まれたことを報告する可能性はありますか?実際にはまだどこかのキャッシュに残っていますか? OS/HDD/ファイルシステムにどの程度依存していますか?

0 投票する
8 に答える
12938 参照

c# - c#配列にランダムにインデックスを付ける最速の方法

double値「vals」の配列があります。この配列にランダムにインデックスを付けて値を取得する必要があります。GenRandomNumber()は0から1までの数値を返しますが、0または1は返しません。Convert.ToInt32を使用して基本的にすべてを小数点以下の桁数の左側に配置していますが、これを行うより効率的な方法が必要ですか?

これが私のコードです:

ありがとう

アップデート

返信してくれたすべての人に感謝しますが、メソッドrand.NextDouble()を持つ提供されたMersenneTwister乱数実装を使用するように制約されています

アップデート2

これについてもう少し考えてみると、私がする必要があるのは、0からarray.length-1までの乱数を生成し、それを使用して配列にランダムにインデックスを付けることです。valsの長さは2^20 = 1048576であるため、ランダムなintを生成するだけで十分です。MersenneTwisterには次の方法があることに気付きました。

vals [rand.Next(vals.length-1)]のように呼んだら、正しく機能するはずです。MersenneTwisterにはコンストラクターがあることもわかります。

これが何のためにあるのかわからないので、これを使用して、0からvals.lengthの配列を提供する許容可能な乱数を事前入力できますか?

FYI valsは、正規分布曲線を分割する長さ1048576の二重配列です。私は基本的にこのメカニズムを使用して、正規分布の数値をできるだけ速く作成しています。モンテカルロシミュレーションでは、毎日数十億の正規分布の乱数を使用するため、少しでも役立ちます。

0 投票する
2 に答える
2609 参照

compression - マルチパート gzip ファイルのランダム アクセス (Java で)

これは、「実現不可能」または「努力する価値がない」の領域に入る可能性がありますが、ここでは説明します。

マルチパート gzip ファイル内に保存されているレコードにランダムにアクセスしようとしています。具体的には、私が興味を持っているファイルは、圧縮されたHeretrix Arc ファイルです。(マルチパート gzip ファイルに慣れていない場合は、gzip 仕様により、複数の gzip ストリームを単一の gzip ファイルに連結できます。それらは辞書情報を共有せず、単純なバイナリの追加です。)

ファイル内の特定のオフセットを探し、gzip マジック ヘッダー バイト (つまり、RFCに従って 0x1f8b) をスキャンし、次のバイトから gzip ストリームを読み取ろうとすることで、これを実行できるはずだと考えています。 . このアプローチの問題は、同じバイトが実際のデータ内にも現れる可能性があることです。そのため、これらのバイトを探すと、gzip ストリームの読み取りを開始する位置が無効になる可能性があります。レコード オフセットがアプリオリに知られていない場合、ランダム アクセスを処理するより良い方法はありますか?